nginx相关命令
- 在windows 下nginx 开头的命令要改为 .\nginx ,例如: .\nginx -t
命令 | 作用 |
---|---|
nginx -t | 验证(nginx.conf)配置文件是否有语法错误 |
nginx -V | 查看Nginx的版本号 |
start nginx | 启动Nginx (windows下start nginx) |
nginx -c /usr/local/nginx/conf/nginx.conf | 启动nginx |
nginx -s stop | 快速停止或关闭Nginx |
nginx -s quit | 正常停止或关闭Nginx |
nginx -s reload | 配置文件修改重装载命令 |
nginx -h | 查看帮助信息 |
nginx -s reopen | 打开日志文件 |
nginx.conf 配置文件
- nginx.conf是nginx重要的配置文件。配置虚拟主机,反向代理,是否采用负载均衡等等一系列的配置,都是在nginx.conf进行配置的。
nginx.conf文件结构
- 文件结构主要由三块组成:全局块,events块,http块;http块中包含http全局块和多个server块,每个server块中包含server全局块和多个location块,采用就近原则生效
全局块
配置一些影响整体运行的指令,通常有服务器用户组允许生成的worker process nginx.pid存放路径 日志存放路径 类型 配置文件引入
events块
影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有是否开启对WP下的网络进行序列化 是否允许同时接受多个网络连接 事件驱动模型 每个WP可以同时支持处理的最大连接数
http块
重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置 文件引入 MIME-TYPE定义 日志自定义 是否使用sendfile传输文件 连接超时时间 单连接请求数上限
nginx.conf 配置细节详解
1.全局模块常用配置
配置用户组
- 运行用户可不设置,默认即是nginx
# 配置alleyz用户 admin组下有启停权限
user alleyz [admin];
配置运行进程数
- nginx进程,建议设置为和本机cpu核数一致
- 如果设置为数字,启动以后就有多少个worker process
- 设置为auto表示自动检测
# 表示nginx启动四个进程
worker_processes 4;
配置pid文件存放路径
- 默认存放在logs/nginx.pid
- pid:进程标识符
pid logs/nginx.pid;
配置错误日志文件的存放路径
- 可在全局块、http块、server块、location块配置
error_log file | stderr [ debug| info | notice | warn | error | crit | alert | emerg]
配置文件引入
- 可在任意地方引入
- 缺省值: none
# 包含一个目录下所有以”.conf”结尾的文件
include vhosts/*.conf;
2. 事件(events)模块的常用组件
选择事件驱动模型
use kqueue | rtsig | epoll | /dev/poll | select | poll | eventport
配置最大连接数
- 允许每一个WP同时开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.
worker_connections number; #默认值 512
accept_mutex
- 默认开启(激活)
- 当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题」
accept_mutex on | off;
设置是否允许同时接受多个连接
- 默认关闭
multi_accept on | off;
连接超时时间
keepalive_timeout 60;
客户端请求头部的缓冲区大小
- 这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小,且该值必须设置为“系统分页大小”的整倍数。
client_header_buffer_size 4k;
为打开文件指定缓存
- 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
设置检查一次缓存的有效信息的间隔时间
open_file_cache_valid 80s;
open_file_cache_min_uses
- open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的。
# 如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_min_uses 1;
3. HTTP模块的核心组件和变量
- http模块主要有三个作用域: http,server,location
- http域:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server域:配置虚拟主机的相关参数,一个http中可以有多个server。
- location域:配置请求的路由,以及各种页面的处理情况。
- 该模块下有些配置的语法过于复杂,下文只简单介绍
3.0 通用的配置
# 配置该域内需要引用文件或路径的一个“相对根路径”
# 默认值:root html
root /data/test;
3.1.HTTP作用域
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
# 负载均衡
upstream qianyunlai.com {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
3.2.Server作用域
#监听端口
listen 80;
#监听地址,可以采用域名,多个用空格隔开
server_name www.abc.com abcd.com;
#单连接请求上限次数。
keepalive_requests 120;
# 配置该域内其它文件相对路径的相对根路径
# 默认值:root html
root /data/test;
# 遇到500,502等错误,重定向到/50x.html地址
error_page 500 502 503 504 /50x.html;
#定义本虚拟主机的访问日志
access_log /var/log/nginx/qianyunlai.log main;
3.3.location 作用域
root /data/cat; #location内根目录
index html.index; #设置默认页
proxy_pass http://localhost:8888; #请求转向的服务器
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
- alias
- alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
- 使用alias时,目录名后面一定要加”/”。
- alias可以指定任何名称。
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
location ~ /page/ {
alias /data/statics/newPage/
}
# 如果一个请求的URI是/page/error/error.page时,web服务器将会返回服务器上的/data/statics/newPage/error/error.page的文件。
3.4 if 作用域
- if作用域在 Nginx rewrite 重写模块中有详述
windows 下配置示例
worker_processes 4;
error_log logs/error.log notice;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 我在本机的hosts里配置里abcd.com,abc.com两个到本机的映射
# 我以abc.com:8861访问本机时会转到本机8888端口的服务
server {
listen 8861;
server_name abc.com;
location / {
proxy_pass http://localhost:8888;
}
}
# 我以abcd.com:8861访问本机时会转到baidu的链接上
server {
listen 8861;
server_name abcd.com;
location / {
proxy_pass http://www.baidu.com;
}
}
}
总结
- 以上配置讲解很乱,尤其是http模块,配置细节缺失很多,打算后面根据具体的功能实现单独拆分章节讲解。如有错误,欢迎指正。