一、nginx概况
1、nginx配置文件
- 核心模块:main http server location mail
2、nginx模块
- event module:事件处理机制
- phase handler:称为 handler 模块,处理客户端请求并产生待响应内容
- output filter:也称为 filter 模块,主要是负责对输出的内容进行处理,可以对输出进行修改
- upstream:upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端
- load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器
二、常用定制
1、存在多个server,都写在nginx.conf,文件太乱
- 使用include指令,引用server文件,支持通配符
2、调整工作线程
- work_processes,一般配置为和cpu核心数相同的数量
3、静态页面读取已失效cookie,不使用cookie
location /xxx {
add_header Cache-Control no-cache;
add_header Pragma no-cache;
add_header Expires 0;
}
4、多个服务器负载
upstream kyxm-server {
ip_hash; # 绑定同一ip客户端请求到同一服务器
server 10.10.3.94 weight=1; // weight设置负载权重
server 10.10.3.95 weight=1;
}
5、哪些模块是比较常用要定制的地方?
- filter 处理请求或响应页面的内容
- upstream 负载服务器配置
- hadler 不常用,但是可以配置请求的负载均衡处理策略
三、配置样例
1、nginx.conf配置文件
点击查看代码
#user nobody;
worker_processes 4; # 定制:工作线程数(取cpu核心数即可)
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#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 application/javascript;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
include vhost/*.conf; # 定制:外部配置文件加载
}
2、定制配置文件
点击查看代码
upstream kyxm-server {
ip_hash; # 同一ip客户端转发到指定服务器
server 10.10.3.94 weight=1; # 设置该服务器负荷为1 (back 备份机,down 无可用后使用)
server 10.10.3.95 weight=1;
}
server {
listen 8899;
server_name localhost;
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 256k;
client_max_body_size 2048m; #允许客户端请求的最大单文件字节数(定制:多个服务器就设置大些)
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_temp_file_write_size 256k;
charset utf-8;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#access_log /var/log/nginx/host.access.log main;
location /server/ {
proxy_pass http://192.168.8.69:5001/eap/;
proxy_cookie_path /eap/ /;
# 替换
sub_filter_types 'text/html;charset=UTF-8' '*' text/javascript application/javascript text/plain text/JSON text/css application/json;
sub_filter '192.168.8.69' '192.168.5.17';
sub_filter_once off;
}
location /server1 {
root D:\sysware-609\nginx-1.15.8\html;
index index.html index.htm;
# 定制:禁用cookie缓存,解决切换用户token失败问题
# proxy_pass http://kyxm-server;
add_header Cache-Control no-cache;
add_header Pragma no-cache;
add_header Expires 0;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
参考文档