Nginx拆分配置文件的办法


摘要

最近公司使用Nginx进行微服务的路由处理
但是发现随着业务发展, 配置文件越来越复杂.
修改起来也很容易出现错误.
基于此. 想通过拆分配置文件的方式来提高修改效率和准确性. 

其实方法非常简单, 记录一下知识备忘.

拆分的方法

其实不需要必须使用 conf.d的目录
可以使用自定义目录进行处理
比如这次我准备使用
upstream
location
两个目录
一个用来存放 后端服务器的地址列表
一个用来存放 proxy_pass代理服务的设置

拆分说明

主要的配置文件为  nginx.conf
然后通过 nginx -t -c nginx.conf 进行检查.
然后可以通过include的方式挂载到里面的配置文件. 

方式还是比较优雅的.

main 的配置文件

worker_processes  2;
events {
    worker_connections  10240;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';
    access_log /data/nginx/gscloudsu.log main ; 
    client_header_timeout 600;
    client_body_timeout 600;
    client_max_body_size 300m;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    proxy_buffer_size 1024k;
    proxy_buffers 16 1024k;
    proxy_busy_buffers_size 2048k;
    proxy_temp_file_write_size 2048k;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 8;
    gzip_types text/plain application/javascript text/css application/json text/javascript image/svg+xml image/png;
    gzip_vary off;

    include upstream/*.conf ;

    server {
        listen       5200;
        server_name  localhost;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

     include location/*.conf ;

    } 
}

location配置节

mainapp: 

       location ^~ / {
            proxy_pass  http://appmain/;
        }
        #业务中台
        location ^~ /api/bp {
            proxy_pass  http://appmain/api/bp;
        }
        # web apps
        location ^~ /apps/bp {
            proxy_pass  http://appmain/apps/bp;
        }
slaveapp: 

        # crm apps web
        location ^~ /apps/crm {
            proxy_pass  http://appslave/apps/crm;
        }
        # crm service to Java
        location ^~ /api/crm {
            proxy_pass  http://appslave/api/crm;
        }

upstream配置节

main的:
    upstream appmain {
      ip_hash;
      server 127.0.0.1:5201;  
      server 127.0.0.1:5202;  
    }
appslave的:
    upstream appslave {
      ip_hash;
      server 127.0.0.1:5298;
      server 127.0.0.1:5299;  
    }