启停命令
-
检查配置文件语法
nginx -t
-
热加载,重新加载配置文件
nginx -s reload
-
快速关闭
nginx -s stop
-
等待工作进程处理完成后关闭
nginx -s quit
-
强制关闭
ps -ef|grep nginx kill -9 ThreaID
全局配置
-
工作进程数
worker_processes 1; #工作进程数 根据硬件调整,通常等于CPU数量或者2倍于CPU events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; # 每个工作进程连接数 默认为512 }
-
日志输出
access_log logs/access.log access; # 访问日志输出目录 【off】 error_log logs/error.log; # 错误日志输出目录 日志等级:[notice][info][不填] pid logs/nginx.pid; # 进程标识符输出 # 自定义日志格式 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值
-
打开文件描述符数目
worker_rlimit_nofile 65535; #现在在Linux 2.6内核下开启文件打开数为65535
-
最大链接数
worker_connections 204800; #没个工作进程的最大连接数量
-
超时时间
keepalive_timeout 60s; #指定每个TCP连接最多可以保持多长时间,单位默认是s client_body_timeout 20s; #指定客户端与服务端建立连接后发送 request body 的超时时间 send_timeout 30s; #服务端向客户端传输数据的超时时间
-
请求头大小配置
client_header_buffer_size 4k; #客户端请求头部的缓冲区大小。 large_client_header_buffers 8 128k; #客户请求头缓冲大小 open_file_cache max=102400 inactive=20s; #指定缓存是否启用
代理配置【http&server】
服务配置
http{ include mime.types; #mime类型 由mime.types文件定义 default_type application/octet-stream; sendfile on; client_max_body_size 1024M; keepalive_timeout 60s server { listen 80; #配置监听端口 server_name supconit.***.com; #配置访问域名 location ~* \.(mp3|exe)$ { #对以“mp3或exe”结尾的地址进行负载均衡 #将代理服务器收到的用户信息传到真实服务器上 proxy_set_header Host $host; # 传递域名 proxy_set_header X-Real-IP $remote_addr; # 传递ip proxy_set_header X-Scheme $scheme; # 传递协议 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip }; location /my/ { proxy_pass http://my_server/; proxy_set_header Host $host:$server_port;# 传递域名+端口 proxy_redirect http://my_server/ http://$host:$server_port/my/; #重定向 将【http://my_server/】重定向到【http://$host:$server_port/my/】 } location ^~/km-portal/ { try_files $uri $uri/ /index.html; index index.html index.htm; root html/hc; # 指定静态文件地址 } } }
静态资源代理
1、#静态资源目录使用 root alias location ~^/files/ { root /home/; index index.html index.htm; # 用root方式,location中的路径会拼加到root的地址后面 # 请求路径为:http://localhost:8080/files/index.jpg 实际访问为:/home/files/index.jpg } location ~^/files/ { alias /home/; index index.html index.htm; # 用alias方式,location中的路径不会拼加到alias的地址后面 # 这请求路径为:http://localhost:8080/files/index.jpg 实际访问为:/home/index.jpg } 2、# 默认访问 # 部署路径:/home/web/my_demo # 访问路径为:http://localhost:8090/ location / { try_files $uri $uri/ /index.html; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; root /home/web/my_demo/; index index.html index.htm; } 3、 # 带前缀的访问 # 部署路径:/home/web/my_demo # 访问路径为:http://localhost:8090/my_demo/ # 如果location路径最后没有配置斜杠,则浏览器输入访问地址后,路径最后会自动拼一个斜杠 location ^~/my_demo/ { try_files $uri $uri/ /my_demo/index.html; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; root /home/web/; index index.html index.htm; }
后台服务代理
#################### 第一种场景(代理地址不加斜杠) #################### # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/api/getUser location ^~/api/ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } # 请求路径为:http://127.0.0.1:8080/api/getUser 实际指向为:http://127.0.0.1:8000/api/getUser location ^~/api { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } #################### 第二种场景(代理地址+斜杠) #################### # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/getUser location ^~/api/ { proxy_pass http://127.0.0.1:8000/; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000//getUser location ^~/api { proxy_pass http://127.0.0.1:8000/; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } #################### 第三种场景(代理地址+后缀) #################### # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/user/getUser location ^~/api { proxy_pass http://127.0.0.1:8000/user; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/usergetUser location ^~/api/ { proxy_pass http://127.0.0.1:8000/user; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } #################### 第四种场景(代理地址+后缀+斜杠) #################### # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/user/getUser location ^~/api/ { proxy_pass http://127.0.0.1:8000/user/; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 } # 请求路径为:http://127.0.0.1:8080/api/getUser 实际代理为:http://127.0.0.1:8000/user//getUser location ^~/api { proxy_pass http://127.0.0.1:8000/user/; proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号 proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址 }
负载配置
-
轮询(默认)
upstream bakend { server 127.0.0.1:8027; server 127.0.0.1:8028; server 127.0.0.1:8029; hash $request_uri; }
-
weight(指定轮询几率/权重配置)
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=15; }
-
ip_hash(每个请求按访问ip的hash结果分配,每个访客固定访问一个后端服务器【根据用户ip分配】)
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } upstream bakend{#定义负载均衡设备的Ip及设备状态}{ ip_hash; server 127.0.0.1:9090 down; server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060; server 127.0.0.1:7070 backup; }
-
fair(【第三方】按后端服务器的响应时间来分配请求,响应时间短的优先分配)
upstream backend { server server1; server server2; fair; }
-
url_hash(【第三方】按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器)
upstream backend { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
#在需要使用负载均衡的server中增加 proxy_pass http://bakend/; upstream backend { ip_hash; server server1 down; #down表示单前的server暂时不参与负载 server server2 weight=10; #weight为weight越大,负载的权重就越大。 server server3 max_fails=10 fail_timeout=60s; #允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误, fail_timeout:max_fails次失败后,暂停的时间。 server server4 backup; #其它所有的非backup机器down或者忙的时候,请求backup机器 }