nginx config 的整体布局如下

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

nginx config 配置例子

#配置用户或者组,默认为nobody nobody。
user  nginx;
#允许生成的进程数,默认为1
worker_processes  auto;

#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
error_log  /var/log/nginx/error.log notice;

#指定nginx进程运行文件存放地址
pid        /var/run/nginx.pid;


events {
     accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
     multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
     #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #最大连接数,默认为512
    worker_connections  1024;
}


http {
    #文件扩展名与文件类型映射表
    include       /etc/nginx/mime.types;
    #默认文件类型,默认为text/plain
    default_type  application/octet-stream;

    #给文件格式命名为main
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # 配置nginx 日志地址,并设置文件格式为mian
    access_log  /var/log/nginx/access.log  main;

    #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile        on;
    #tcp_nopush     on;
    #连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout  65;
    #请求头带"_" 不会去除掉
    underscores_in_headers on;
    #接收客户端header超时, 默认60s, 如果60s内没有收到完整的http包头, 返回408
    client_header_timeout 60s;
    #接收客户端body超时, 默认60s, 如果连续的60s内没有收到客户端的1个字节, 返回408
    client_body_timeout 60s;
    #nginx与upstream server的连接超时时间
    proxy_connect_timeout 60s;
    #nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭
    proxy_send_timeout 60s;
    #发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭
    send_timeout 60s;
    proxy_max_temp_file_size 0;

    proxy_request_buffering off;

    # gzip 压缩级别 1-10
    gzip  on;
    # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
    gzip_min_length 1k;
    #识别http的协议版本(1.0/1.1)
    gzip_http_version   1.1;
    #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
    gzip_buffers 4 16k;
    # 进行压缩的文件类型。
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    # gzip 压缩级别 1-10,越高压缩比越大,越消耗cpu
    gzip_comp_level 3;
    #和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
    gzip_vary on;
    #IE6对Gzip不怎么友好,不给它Gzip了
    gzip_disable "MSIE [1-6]\."

     #拒绝的ip(考虑通过include 引入文件方式引入)
    deny 127.0.0.2;
    deny 127.0.0.3;

  # upstream负载均衡算法
  # 轮询算法(默认算法):每个请求依次会分配给后端不同的应用程序服务器,不理会后端服务器的时机压力
  # IP_HASH:当IP进行重复访问时会被指定到上次访问的服务器,可以解决动态网站session共享问题
   upstream wp_ip_hash{
     ip_hash;
     server 10.158.1.10:8901;
     server 10.158.1.20:8901;
     server 10.158.1.30:8901;
    }
   #基于URL的HASH 当   当客户端多次访问同一个地址时分配到固定的节点
   upstream wp_url_hash{
       hash $request_uri consistent;
       server 10.158.1.10:8901;
       server 10.158.1.20:8901;
       server 10.158.1.30:8901;
   }

   #最少连接数轮询:哪个节点当前的连接数少就分配给哪个节点处理
   upstream wp_lease_conn{
    least_conn;
    server 10.158.1.10:8901;
    server 10.158.1.20:8901;
   }
   #该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,
   #如果 $http_upgrade 不为 '' (空),则 $connection_upgrade 为 upgrade,如果 $http_upgrade 为 '' (空),则 $connection_upgrade 为 close
   #websocket
   map $http_upgrade $connection_upgrade {
       default upgrade;
       '' close;
   }


server {
    # 表示 nginx 监听的端口
    listen 80;

    #如果为/ 重写路径到/test1
    location / {
        rewrite / /test1;
    }

    location /test1 {
         #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
         proxy_set_header            Host $host;
         # 表示传递时来源的ip还是现在的客户端的ip
         proxy_set_header            X-Real-IP $remote_addr;
         proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
         # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
         proxy_http_version 1.1;
         # 表示设置Upgrade不变(websocket)
         proxy_set_header Upgrade $http_upgrade;
         #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
         proxy_set_header Connection "upgrade";
         #表示代理转发到 upstream wp_ip_hash
         proxy_pass http://wp_lease_conn;

    }

    #表示监听 /test/websocket/
    location ^~/ws/websocket/{
        #表示代理转发到 upstream wp_ip_hash
        proxy_pass http://wp_ip_hash;
        #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
        proxy_set_header            Host $host;
        # 表示传递时来源的ip还是现在的客户端的ip
        proxy_set_header            X-Real-IP $remote_addr;
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

        # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
        proxy_http_version 1.1;
        # 表示设置Upgrade不变(websocket)
        proxy_set_header Upgrade $http_upgrade;
        #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
        proxy_set_header Connection "upgrade";
    }
}
#ssl 配置
#include ssl.config

}

当配置需要添加ssl 支持https/wss 配置如下

#支持https/wss 配置
server{
    #监听443端口
    listen 443;
    ssl on;
    #申请域名对应的证书
    ssl_certificate /etc/ssl/yin.com_bundle.crt;
    #申请域名对应的密匙
    ssl_certificate_key /etc/ssl/yin.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location /test1 {
         #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
         proxy_set_header            Host $host;
         # 表示传递时来源的ip还是现在的客户端的ip
         proxy_set_header            X-Real-IP $remote_addr;
         proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
         # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
         proxy_http_version 1.1;
         # 表示设置Upgrade不变(websocket)
         proxy_set_header Upgrade $http_upgrade;
         #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
         proxy_set_header Connection "upgrade";
         #表示代理转发到 upstream wp_ip_hash
         proxy_pass http://wp_lease_conn;
    }
}
#server{
#    listen 80;
#    rewrite ^/(.*)$ https://yin.com:443/$1 permanent;
#}

上面是nginx的基本配置,需要注意的有以下几点:

1、配置完成之后通过 nginx -t 对nginx 配置文件进行检查
2、配置检查完毕之后 nginx -c nginx.conf -s reload 进行重新加载
3、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
4、每个指令必须有分号结束。

5、location 配置的语法

语法规则: location [=|~|~*|^~] /uri/ {}

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐