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的目录结构

    当你准备好了,机会来临的时候,你才能抓住
  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/studentytj/p/15674744.html
Copyright © 2011-2022 走看看