nginx入门手册

一、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、多个服务器负载

  • 与server平级配置
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;
    }
}

参考文档

上一篇:【渝粤教育】国家开放大学2018年春季 8643-22T数据库基础与应用 参考试题


下一篇:什么是token?