146 lines
6.5 KiB
Markdown
146 lines
6.5 KiB
Markdown
---
|
||
layout : post
|
||
title : "初试NGINX"
|
||
subtitle : "A High Performance Web Server"
|
||
date : 2022-06-25 20:27:31
|
||
author : "Manford Fan"
|
||
catalog : false
|
||
header-img : "img/post-bg-universe.jpg"
|
||
tags :
|
||
- Nginx
|
||
- Server
|
||
---
|
||
|
||
终于要开始记录[NGIINX](https://nginx.org/)这个系列的主题了,MySQL准备再拖一拖,先把nginx这个过一遍。Nginx是一种高性能的Web服务器,起主要作用有三个:处理静态资源,反向代理(缓存&负载均衡)以及API服务(OpenResty)。当前网络上Web服务器很多,比如最老牌的Apache,Tomcat,微软的Microsoft IIS(Internet Information Services),还有Lighttpd,IBM的WebSphere服务器,Oracle的Weblogic,以及W3C的Jigsaw等等下图是2022年5月份[Net Craft](https://news.netcraft.com/)网站统计的各种服务器市场占有率排行,目前Nginx已经超越Apache跃居第一了!
|
||
|
||

|
||
|
||
|
||
## 一、Nginx概述
|
||
|
||
Nginx是由俄罗斯人伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,从2002开始开发,2004年发布了第一个版本,09年开始支持Windows版本,11年1.0版本发布,同时成立了nginx-plus商业公司15年发布了一个重要的功能,提供了stream四层反向代理,支持http2,截止到2022年6月,nginx最新稳定版本是1.22.0。
|
||
|
||
|
||
|
||
其核心特点如下
|
||
|
||
- 对操作系统内核深度挖掘,实现了高并发,高性能
|
||
- 优秀的模块化设计,生态圈号,可扩展性好
|
||
- 反向代理,负载均衡,保证了高可靠性
|
||
- 热部署,热升级
|
||
- BSD许可,可修改商用
|
||
|
||
|
||
## 二、Nginx构成,安装以及配置文件
|
||
|
||
如果把nginx比喻成一辆汽车,那么跟这辆车相关的部分可简单分为四部分——车身本体,驾驶员,GPS导航以及维修厂,对应于相关文件分别是由源码各个模块编译出来的可执行文件,控制nginx行为的nginx.conf配置文件,记录每一条访问的access.log文件,定位问题的error.log文件。如下是nginx安装包的所有文件列表及其对应的功能:
|
||
|
||
```text
|
||
auto -------- 编译必须的工具以及操作系统判断相关的文件
|
||
CHANGES ----- 英文版变更列表
|
||
CHANGES.ru -- 俄语版变更列表
|
||
conf -------- 配置文件夹
|
||
configure --- configure脚本,保证正确编译
|
||
contrib ----- 两个perl脚本,一个vim辅助工具
|
||
html -------- html示例文件
|
||
LICENSE ----- license文件
|
||
man --------- 帮助文档
|
||
README ------ 说明文档
|
||
src --------- 源码文件
|
||
```
|
||
|
||
编译安装详见**[Debian Server部署全过程记录](https://blog.rustle.cc/2022/03/29/debian_server/#4%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85nginx)**,这里着重记录下配置文件的语法。Nginx的配置文件是一个文本文件,存放在安装目录下的`conf`文件夹里,通常是nginx.conf,不过也可以使用`-c`选项手动指定。其语法规则基本如下:
|
||
|
||
1. 配置文件由指令和指令块构成
|
||
2. 每条指令以分号结尾,指令与参数之间用空格分隔
|
||
3. 指令块用大括号将多条指令组织在一起
|
||
4. `include`语句允许聚合多个配置文件以提高可维护性
|
||
5. 使用`#`符号作为注释,提高可读性
|
||
6. 使用`$`符号做变量引用
|
||
7. 部分指令参数支持正则表达式
|
||
8. 包括四个块:http,upstream,server,location
|
||
|
||
更多配置选项,比如模块功能,变量使用,可以参考[NGINX官方文档](https://nginx.org/en/docs/)。
|
||
|
||
## 三、配置upstream
|
||
|
||
CDN(Content Delivery Networks)可能是一个比较小众的名词,不太为人所知,它的角色可以用现实中的快递小哥作类比,是名副其实的网络界的快递小哥。简单来说就是将客户网站允许被缓存的内容存储到CDN的服务器上,用户再次访问的时候,直接从CDN服务器返回即可(因为CDN服务器遍布全国,甚至全世界,而自己的服务器受地域,带宽,本机性能的影响)。没错,`upstream`正是起关键作用的那一个,它可以将客户的内容以一定的算法存储起来,当用户需要的时候直接提供访问。
|
||
|
||
```nginx
|
||
# 模拟客户源站
|
||
# ===============================================
|
||
server {
|
||
listen 127.0.0.1:8080;
|
||
location / {
|
||
alias /root/nginx/wiki/;
|
||
index index.html index.htm;
|
||
}
|
||
|
||
# 模拟CDN的VIP或RIP
|
||
# ===============================================
|
||
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=mycache:100m
|
||
max_size=10G inactive=60m use_temp_path=off;
|
||
|
||
upstream local {
|
||
server 127.0.0.1:8080;
|
||
}
|
||
|
||
server {
|
||
listen 80;
|
||
server_name nginx.rustle.cc;
|
||
location / {
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_cache mycache;
|
||
proxy_cache_key $host$uri$is_args$args;
|
||
proxy_cache_valid 200 302 304 1d;
|
||
proxy_pass http://local;
|
||
}
|
||
}
|
||
```
|
||
|
||
如上是第一个配置是nginx服务器,模拟的是客户源站,第二个配置是OpenResty服务器,模拟的是CDN的VIP或者RIP,条件有限,就在同一个机器上部署了,不过效果是一样的。当用户访问OpenResty配置的域名时,会缓存下所有的文件,此时停止nginx服务,再次访问域名仍然可以成功现实页面。
|
||
|
||
## 四、日志可视化工具-Go Access
|
||
|
||
|
||
## 五、其他补充
|
||
|
||
#### A. Nginx命令行
|
||
|
||
|选项|功能|
|
||
|:-|:-|
|
||
|-?,-h | this help|
|
||
|-v | show version and exit|
|
||
|-V | show version and configure options then exit|
|
||
|-t | test configuration and exit|
|
||
|-T | test configuration, dump it and exit|
|
||
|-q | suppress non-error messages during configuration testing|
|
||
|-s signal | send signal to a master process: stop, quit, reopen, reload|
|
||
|-p prefix | set prefix path (default: /root/nginx/)|
|
||
|-e filename | set error log file (default: logs/error.log)|
|
||
|-c filename | set configuration file (default: conf/nginx.conf)|
|
||
|-g directives | set global directives out of configuration file|
|
||
|
||
其中`-s`选项支持`stop`,`start`,`quit`,`reload`和`reopen`命令,功能分别是停止,启动,优雅退出,重载配置以及重新记录日志。
|
||
|
||
|
||
#### B. 单位相关
|
||
|
||
|**时间单位|含义|空间单位|含义**|
|
||
|:-|:-|:-|:-|
|
||
|ms|毫秒|NULL|不加单位,默认byte|
|
||
|s|秒|k/K|kilobytes|
|
||
|m|分钟|m/M|megabytes|
|
||
|h|小时|g/G|gigabytes|
|
||
|d|天|||
|
||
|w|星期|||
|
||
|M|月|||
|
||
|y|年|||
|
||
|
||
|
||
## 六、参考文档
|
||
|
||
- []()
|