一、指令说明
Nginx指令 | 说明 |
worker_processes | 配置Nginx的工作进程数,一般为Cpu总核心数或者总核心数的两倍 |
events | 控制Nginx处理连接的方式 |
http | Nginx 处理 http 请求的主要配置块,大多数配置都在这里面进行 |
worker_connections | 配置 Nginx 允许单个进程并发连接的最大请求数 |
include | 用于引入配置文件 |
default_type | 设置默认文件类型 |
sendfile | 默认值为 on ,表示开启高效文件传输模式 |
keepalive_timeout | 设置长连接超时时间(单位:秒) |
server | Nginx 中主机的配置块,可用于配置多个虚拟主机 |
listem | 监听端口,默认监听 80 端口 |
server_name | 设置主机域名;除了可以精准配置方式外,还可以利用通配符(*)与正则表达式设置域名,实现域名的泛解析 。如:server name *.test.com |
location | server 中对应目录级别的控制块 ,可以有多个 |
root | 设置主机站点根目录地址,使用反向代理的时候可以用作设置缓存目录等 |
index | 指定默认索引文件(首页) |
error_page | 自定义错误页面 |
error_log | 存放错误日志(参数1:存在路径;参数2:日志等级);debug、info、notice、warn、error 和 crit ,日志记录详细程度依次递减, debug 记录的内容最详细, crit 记录的内容最简洁。 error_log 指令可以在main、http、server 、location 块中设置,配置方式相同。 关闭日志: error_log /dev/null ; |
autoindex | 开启目录列表功能;在 http块中,表示用于对所有站点都有效 ;在server 块中,表示对指定站点有效;在location块中,表示对某个目录起作用。 |
autoindex_exact_size | 设置精准显示文件大小:on/off |
autoindex_localtime | 文件最后修改时间格式:on/off |
proxy_set_header | 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息 |
proxy_connect_timeout | 配置 Nginx 与后端代理服务器尝试建立连接的超时时间 |
proxy_read_timeout | 配置 Nginx 向后端服务器组发出 read 请求后,等待响应的超时时间 |
proxy_send_timeout | 配置 Nginx 向后端服务器组发出 write 请求后,等待响应的超时时间 |
proxy_redirect | 用于修改后端服务器返回的响应头中的 Location 和 Refresh |
upstream web_server | 负载均衡配置模块 |
proxy_store | 用于开启本地缓存 |
proxy_store_access | 设置缓存的读写规则 |
proxy_temp_path | 设置反向代理时接收的数据临时存储文件的目录 |
负载均衡参数 | 参数值 |
weight | 权值,权值越高则被分配到的概率越大;server 192.168. 78.128 weight=1 max_fails=1 fail_timeout=2 ; |
max_fails | 允许请求失败的次数,默认为i。当超过最大次数时,返回 proxy_ next_ upstream 指令定义的错误 |
fail_timeout | 在经历了max_fails次失败后,暂停服务的时间 。 且在实际应用中 max_fails 一般与 fail_ timeout 一起使用 |
backup | 预留的备份机器 |
down | 表示当前的 server 暂时不参与负载均衡 |
二、location匹配规则
location 可以同时定义多个,当 一个配置文件中同时出现多个 location 时,普通location 之间遵循“最大前缀匹配”原则 。 通俗地讲就是,匹配度最高的 location 将会执行。
当最大前缀 location 与正则 location 同时存在时,如果正则 location 匹配成功,则不会执行最大前缀 location
前缀 | 说明(优先级1为最高) |
/ | 最大前缀匹配(优先级:4) |
= | 根据其后的指定模式进行精准匹配 。例:在访问时要与 /html/aaa/index.html 完全一致才会执行其后的指令块(优先级:1) |
~ | 正则匹配:使用正则表达式完成 locat ion 的匹配,区分大小写(优先级:3) |
~* | 正则匹配:使用正则表达式完成 location 的匹配,不区分大小写(优先级:3) |
^~ | 非正则匹配:不使用正则表达式,完成以指定模式开头的 location 匹配(优先级:2) |
@ | 用于定义一个 location 块,且该块不能被外部客户端所访问,只能被Nginx 内部配置指令所访问 |
user nginx nginx; #启动nginx工作进程的用户和组,用root肯定是不安全的
#设置工作进程数量,也可以使用“auto”,表示自动分配,一般分配为等于CPU核心数。
worker_processes 1;
#将CPU核心与Nginx工作进程绑定,防止工作进程在不同的cpu核心上飘动。可以减少cpu对进程的资源分配与回收和内存管理等。提升nginx的性能。
#八核cpu可以使用八位的二进制位表示,如果是四核心也可以用四位,如:worker_cpu_affinity 0001 0010 0100 1000;
#也可以直接使用auto,如:worker_cpu_affinity auto;
worker_cpu_affinity 00000001 00000010 00000100 00001000;
#工作进程的最大连接数,包括了nginx的所有连接(客户端和代理服务器)
#且nginx的实际并发连接数不能超过linux系统级别的最大打开文件数量限制
worker_rlimit_nofile 100000;
events{
#每个工作进程的最大连接数。linux默认的连接数也是1024,可以将linux和nginx的连接数改高一点
#作为web服务器可以有1024个连接,
#作为反向代理则1024/2个客户端连接,还有一半用来跟真实服务器连接
worker_connections 1024;
#让工作进程尽可能多地接受请求。让工作进程一次性地接受监听队列里的所有请求来处理。如果multi_accept的值设为off,那么工作进程必须一个一个地接受监听队列里的请求。
#如果web服务器面对的是一个持续的请求流,那么启用multi_accept可能会造成worker进程一次接受的请求大于worker_connections指定可以接受的请求数。这就是overflow,这个overflow会造成性能损失,overflow这部分的请求不会受到处理。
multi_accept on; #默认off
}
upstream test{
server 127.0.0.1:8088;
}
http{
include mime.types; #载入mime.types文件,此文件保存了文件的mime映射,标识文件类型
default_type application/octet-stream; #mime.types中未标识的mime映射类型,皆以此方式标识
#access log 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" ';
sendfile on; #启用文件传输,如果是作为web服务器使用,可以开启此选项,提升静态资源的传输速度
keepalive_timeout 60; #设置长连接的保持时间,如果想在浏览器看到效果:keepalive_timeout 60 60;
#一次长连接中允许的最大请求次数,默认为100次,如果一个页面中所需的请求次数过高,可以调高一点
keepalive_request 100;
#gzip压缩配置
gzip on; #开启gzip,off关闭
gzip_disable "MSIE [1-6]\."; #IE 1-6不压缩
gzip_min_length 1000; #小于1000字节的不压缩
gzip_comp_level 3; #压缩级别,低到高1-9;建议3,不要超过5。降低带宽,消耗cpu。
gzip_types text/plain application/x-javascript text/css application/xml image/jpeg image/png image/gif; #压缩的文件类型
#开启文件缓存
open_file_cache max=10000 inactive=60s; ##最大缓存10000个文件,非活动数据超时时长60s
open_file_cache_min_uses 5;#60秒内至少被命中五次才被标记为活动数据
open_file_cache_valid 60s;#每隔60秒检查一次缓存数据的有效性
open_file_cache_errors on;#缓存错误信息
server{
listen 80; #监听80端口号
server_name test.com; #监听域名,使用域名的时候配合upstream一起使用
#SSL证书配置
listen 443 ssl;
server_name test.com;
ssl_certificate cert/_.test.com.crt;
ssl_certificate_key cert/_.test.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#设置access_log日志
access_log logs/site.access.log main;
client_max_body_size 30m; #设置最大请求body大小。默认1m
aio on; #启用异步io,需要编译时开启配置;
#Direct I/O;一般结合sendfile使用,任何大于4M的文件都将以Direct I/O的形式直接从硬盘读取,小于4m的使用sendfile读取;默认关闭
directio 4m;
location / {
root cache; #缓存目录
proxy_store on; #用于开启本地缓存
proxy_store_access user:rw group:rw all:r; #设置缓存的读写规则
proxy_temp_path cache_tmp; #设置反向代理时接收的数据临时存储文件的目录
#利用正则表达式匹配缓存目录中的文件、目录或符号链接是存在
#!-e 表示检查一个文件、目 录或符号链接是否存在
#$request_filename 表示当前请求的文件路径或 URI
if(!-e $request_filename){
proxy_pass http://test;#域名test.com的请求全部转发到Web服务器 127.0.0.1:8088
}
proxy_set_header Host $host; #第1个参数用于表示字段名称,第2个参数表示字段值
proxy_set_header X-Real- IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $limit_rate 10K; #限制响应速度为10KB,防止访问大文件占用带宽
}
#配置websocket\tcp代理,不能和http请求写到一起,否则post请求可能会失效
location /chat/signalr {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_pass http://test;
}
location /img/ {
root /image; #收到"/img/test.png"请求时,将请求映射为"/image/img/test.png"
alias /image/; #收到"/img/test.png"请求时,将请求映射为"/image/test.png"
add_header Cache-Control max-age=36000000; #设置浏览器缓存
index index.html #设置首页文件
}
#显示目录结构
location / {
alias files/;
autoindex on;
}
#显示nginx访问状态信息和统计,编译时开启:–with-http_stub_status_module
location /nginx_status {
stub_status;
}
location =/js{ #精准匹配:用户访问的 URI 与指定的 URI 完全一致的情况
allow 192.168.78.129; #允许此ip地址访问
}
location ~\.html$ { #表示匹配网站根目录下以. html 结尾的文件
allow all; #允许所有用户访问
}
location ~^/aaa/.*\ .html$ { #表示匹配网站根目录下 aaa 目录中以. html 结尾的文件
deny all;
}
error_page 502 504 500 /error.html; #当http响应码为502 504 500时跳转到error.html
error_page 404=200 /404.html ; #将404响应码改为200,并跳转至404.html
location=/50x.html{
}
#权重配置负载均衡
upstream web_server {
server 192.168.1.1 weight=1; # 权重为1
server 192.168.1.2 weight=3; # 权重为3
}
#ip_hash配置负载均衡
upstream web_server {
ip_hash;
server 192.168.1.1;
server 192.168.1.2;
}
#还可以利用第三方模块实现,这里不多做讲解
}
allow 192.168.78.128; #允许此ip地址访问
deny all; #禁止所有客户端访问
error_log logs/error.log notice #错误日志存放,日志等级为notice
}
三、Nginx操作命令
1、使用配置文件启动Nginx : nginx -c /usr/local/nginx/conf/nginx.conf
2、重启服务: service nginx restart
3、 快速停止或关闭Nginx:nginx -s stop
4、 正常停止或关闭Nginx:nginx -s quit
5、 配置文件修改重装载命令:nginx -s reload
6、检查配置文件是否正确: nginx -t
7、 查看nginx信息(可用来查看nginx编译参数,重新编译nginx的时候需要使用):nginx -V