zoukankan      html  css  js  c++  java
  • nginx之配置文件公用抽取

    nginx之配置文件公用抽取

    因为某些原因,需要同时部署同一应用两个不同分支的代码,而配置文件存在较大重复,因此有此篇。

    最近构建的过程中遇到了一些跟nginx配置相关的问题,记录下。

    简单说下构建的状况:前后端分离,jenkins + jar包+nginx部署前端。

    #user  nobody;
    worker_processes  1;
    
    #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  '$upstream_addr $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  on;
    
        # 服务器有限,暂且部署到当前服务器上
        upstream applicationName_server {
    		ip_hash;
            server 127.0.0.1:8081;
            server 127.0.0.1:8082;
        }
    
        server {
            listen       8888;
            server_name  localhost;
        	# 上传文件大小限制100M
        	client_max_body_size 100m;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    	    add_header BackendIP "$upstream_addr;" always;
    
        	set $ROOT_HTML /opt/soft/applicationName/backend/ui/html;
    
    		location ^~/applicationName/login {
    		    proxy_pass http://applicationName_server;
    		    add_header 'Cache-Control' 'no-cache';
    			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;
           
    		}
    		location ^~/applicationName/logout {
    		   proxy_pass http://applicationName_server;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		
    		location /applicationName/api {
    		   proxy_pass http://applicationName_server;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		location ^~/applicationName/cas {
    		   proxy_pass http://applicationName_server;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		location /applicationName/artery {
    		   proxy_pass http://applicationName_server;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    
    		location /applicationName/artery/code {
    		   proxy_pass http://applicationName_server/applicationName/code/;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    
            location ^~/static {
    			root $ROOT_HTML/applicationName;
    		}
    
    		location / {
    				root $ROOT_HTML;
    				 rewrite ^ /applicationName break;	                         
    		}
    		location /applicationName {
    			if ($http_cookie = "") {
    					 add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
    					 rewrite ^ /index.html break;
    				}
    				root   $ROOT_HTML;
    				index  index.html;
    				try_files $uri $uri/ /index.html;		
        		
    		}
    
    		location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
    			root   $ROOT_HTML;
    			try_files $uri $uri/ /index.html =404;
    			expires 1d;
    		}
    
    		location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
    			root   $ROOT_HTML;
    			try_files $uri $uri/ /index.html =404;
    			expires 7d;
    		}
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            
        }
    	
    	server {
            listen       7777;
            server_name  localhost;
        	# 上传文件大小限制100M
        	client_max_body_size 100m;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    	    add_header BackendIP "$upstream_addr;" always;
    
        	set $ROOT_HTML /opt/soft/applicationName/backend/ui/otherhtml;
    
    		location ^~/applicationName/login {
    		    proxy_pass http://127.0.0.1:8087;
    		    add_header 'Cache-Control' 'no-cache';
    			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;
           
    		}
    		location ^~/applicationName/logout {
    		   proxy_pass http://127.0.0.1:8087;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		
    		location /applicationName/api {
    		   proxy_pass http://127.0.0.1:8087;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		location ^~/applicationName/cas {
    		   proxy_pass http://127.0.0.1:8087;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    		location /applicationName/artery {
    		   proxy_pass http://127.0.0.1:8087;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    
    		location /applicationName/artery/code {
    		   proxy_pass http://127.0.0.1:8087/applicationName/code/;
    		   add_header 'Cache-Control' 'no-cache';
    		   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;
    		}
    
            location ^~/static {
    			root $ROOT_HTML/applicationName;
    		}
    
    		location / {
    				root $ROOT_HTML;
    				 rewrite ^ /applicationName break;	                         
    		}
    		location /applicationName {
    			if ($http_cookie = "") {
    					 add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
    					 rewrite ^ /index.html break;
    				}
    				root   $ROOT_HTML;
    				index  index.html;
    				try_files $uri $uri/ /index.html;		
        		
    		}
    
    		location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
    			root   $ROOT_HTML;
    			try_files $uri $uri/ /index.html =404;
    			expires 1d;
    		}
    
    		location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
    			root   $ROOT_HTML;
    			try_files $uri $uri/ /index.html =404;
    			expires 7d;
    		}
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            
        }
    
    
        
    
    }
    
    
    

    刚开始的时候只监听了8888端口(后端端口8081,8082),用来构建dev分支代码。后来,需要构建出一个新的分支,又不能影响dev分支。因此新增一个7777端口进行监听(后端对应端口8087),两个server除了端口不同外就只有proxy_pass对应的地址不同,html的地址不同,因此,考虑将相同部分抽出来。

    在conf同级新建conf.d文件夹,新建dev.conf和performance.conf

    server {
            listen       8888;
            server_name  localhost;
            # 上传文件大小限制100M
            client_max_body_size 100m;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
                add_header BackendIP "$upstream_addr;" always;
    
            set $ROOT_HTML /opt/soft/applicationName/backend/ui/html;
            set $SERVER_URL applicationName_server;
            include common-route.conf;
    
    
        }
    
    
    server {
            listen       7777;
            server_name  localhost;
            # 上传文件大小限制100M
            client_max_body_size 100m;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
                add_header BackendIP "$upstream_addr;" always;
    
            set $ROOT_HTML /opt/soft/applicationName/backend/ui/otherhtml;
            set $SERVER_URL 127.0.0.1:8087;
            include common-route.conf;
    
    
    
        }
    
    
    
    

    这里将原本两个不同点通过设置ROOT_HTMLSERVER_URL来解决。其余的内容放到conf文件夹下的common-router.conf

    # 通用路由
    location ^~/applicationName/login {
                        proxy_pass http://$SERVER_URL;
                        add_header 'Cache-Control' 'no-cache';
                            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;
    
                    }
                    location ^~/applicationName/logout {
                       proxy_pass http://$SERVER_URL;
                       add_header 'Cache-Control' 'no-cache';
                       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;
                    }
    
                    location /applicationName/api {
                       proxy_pass http://$SERVER_URL;
                       add_header 'Cache-Control' 'no-cache';
                       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;
                    }
                    location ^~/applicationName/cas {
                       proxy_pass http://$SERVER_URL;
                       add_header 'Cache-Control' 'no-cache';
                       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;
                    }
                    location /applicationName/artery {
                       proxy_pass http://$SERVER_URL;
                       add_header 'Cache-Control' 'no-cache';
                       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;
                    }
    
                    location /applicationName/artery/code {
                       #return 200 http://$SERVER_URL/applicationName/code;
                    rewrite  ^/(.*)/code/(.*)$ /applicationName/code/$2  permanent;
                       #proxy_pass $CODE_URL;
                       #proxy_pass http://$SERVER_URL/applicationName/code/;
                       #proxy_pass http://127.0.0.1:8087/applicationName/code/;
                       add_header 'Cache-Control' 'no-cache';
                       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;
                    }
                    location /applicationName/code {
                       proxy_pass http://$SERVER_URL;
    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;
                    }
    
            location ^~/static {
                            root $ROOT_HTML/applicationName;
                    }
    
                    location / {
                                    root $ROOT_HTML;
                                     rewrite ^ /applicationName break;
                    }
                    location /applicationName {
                            if ($http_cookie = "") {
                                             add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
                                             rewrite ^ /index.html break;
                                    }
                                    root   $ROOT_HTML;
                                    index  index.html;
                                    try_files $uri $uri/ /index.html;
    
                    }
    
                    location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
                            root   $ROOT_HTML;
                            try_files $uri $uri/ /index.html =404;
                            expires 1d;
                    }
    
                    location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
                            root   $ROOT_HTML;
                            try_files $uri $uri/ /index.html =404;
                            expires 7d;
                    }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
    

    nginx.conf如下

    #user  nobody;
    worker_processes  1;
    
    #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  '$upstream_addr $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  on;
    
        # 服务器有限,暂且部署到当前服务器上
        upstream applicationName_server {
                    ip_hash;
            server 127.0.0.1:8081;
            server 127.0.0.1:8082;
        }
    
    
        include /usr/local/nginx/conf.d/*.conf;
    
    
    
    }
    
    

    虽然上面的配置平平无奇,不过走向正确配置的道路还是遇到了些波折。

    • conf.d文件夹下的两个conf文件的include文件的路径问题,..啥的用不了,反倒是看起来不正确的 include common-route.conf;能够正确引用。另一点是,common-route.conf不能放到conf.d下面,报的错忘了什么了。

    • 原先conf.dconf文件的SERVER_URL是这样的http://applicationName_server,后来报了invalid port,把http://去掉放到具体的server里面了。

    • 单值代码加载,在未做改造前这样

      location /applicationName/artery/code {
      		   proxy_pass http://applicationName_server/applicationName/code/;
      		   add_header 'Cache-Control' 'no-cache';
      		   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;
      		}
      

      第一次改造

      location /applicationName/artery/code {
                        
                        
      	proxy_pass http://$SERVER_URL/applicationName/code/;
      
          add_header 'Cache-Control' 'no-cache';
          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;
      }
      

      这种直接404,而如果把$SERVER_URL改成具体的后端地址,则7777和8888端口中有一个可以正常访问单值代码。谷歌的几个方案都说是什么resolver的问题,但照着改还是不工作

      再后来改造使用rewrite来改写path

         location /applicationName/artery/code {
                         
                      rewrite  ^/(.*)/code/(.*)$ /applicationName/code/$2  permanent;
                         
                         add_header 'Cache-Control' 'no-cache';
                         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;
                      }
      

      路径倒是改了(忽略上面的$2,去掉第一个括号可以改成$1),可applicationName/code又404了。然后又加上了/applicationName/code的location配置

      location /applicationName/artery/code {
                         #return 200 http://$SERVER_URL/applicationName/code;
                      rewrite  ^/(.*)/code/(.*)$ /applicationName/code/$2  permanent;
                         #proxy_pass $CODE_URL;
                         #proxy_pass http://$SERVER_URL/applicationName/code/;
                         #proxy_pass http://127.0.0.1:8087/applicationName/code/;
                         add_header 'Cache-Control' 'no-cache';
                         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;
                      }
                      location /applicationName/code {
                         proxy_pass http://$SERVER_URL;
      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;
                      }
      

    最后,附个conf的目录结构

    当你准备好了,机会来临的时候,你才能抓住
  • 相关阅读:
    HDU 1166 敌兵布阵 (线段树 & 树状数组)
    HDU 1286 找新朋友 (欧拉函数)
    HDU 2203 亲和串 (KMP)
    HDU 1394 Minimum Inversion Number (归并排序 | 线段树 | 数状数组)
    HDU Leftmost Digit
    POJ 1195 Mobile phones
    C# 用jquery多个文件上传
    Ajax.NET Professional csharp DropDownList两级联无刷新绑定
    C# 公农历算法 ChineseLunisolarCalendar的一点思路
    csharp webform Button控件OnClick,OnClientClick事件
  • 原文地址:https://www.cnblogs.com/studentytj/p/15674744.html
Copyright © 2011-2022 走看看