1. 程式人生 > 實用技巧 >Nginx進行反向代理多個web專案

Nginx進行反向代理多個web專案

反向代理:

客戶端(瀏覽器)不直接訪問目標伺服器,而是通過代理伺服器進行訪問,
可以不暴露目標伺服器實際IP。

主要修改nginx.conf檔案
這裡我們先啟動兩個服務:

web1: 8001/; src(專案目錄):/usr/workspace/pc;
web2:8080/admin/;src(專案目錄): /usr/workspace/shiroSSO;
我們對外只暴露80埠,所以實際訪問http://www.simonjia.top:8001/


因為防火牆沒有開通8001埠,所以直接訪問8001,無法訪問;
訪問域名可以:

這裡就起到反向代理的作用。
剛開始部署時發現css和js檔案實際請求地址變成了127.0.0.1(部署多個專案,可根據專案名稱進行正則匹配)

原因是沒有在location中新增 proxy_set_header Host $host;


將代理的host主機地址變成域名實際地址,而不是本地的127.0.0。1;
如果nginx出現404錯誤,請注意alias /usr/workspace/pc;
配置alias對應專案的實際路徑。
從配置檔案中可以看到web2的實際訪問路徑為:
http://www.simonjia.top/admin/login.html
因為在https中也進行相關配置,所以
https://www.simonjia.top/admin/login.html 也可以訪問。
開啟rewrite ^(.*) https://$server_name$1 permanent;這點註釋,可以自動http跳轉到https中。

cd /usr/local/nginx/conf
vim 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  102400;
}


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  on;

    server {
        listen       80;
        server_name www.simonjia.top ;#伺服器域名
	#rewrite ^(.*) https://$server_name$1 permanent; #這句是代表 把http的域名請求轉成https
        #charset koi8-r;
		error_log   /logs/nginx-error.log info;
        access_log  /logs/host.access.log  main;
        location / {
            #root   /usr/tools/nignx/nginx-1.9.9/web;
			alias /usr/workspace/pc;
            #index  index.html index.htm;
	        #proxy_pass  http://www.simonjia.top; #因為這裡還是80埠,所以保持http就可以
			proxy_pass http://127.0.0.1:8001/;#代理的實際埠,在本地8001
			proxy_set_header Host $host;# 代理請求資訊,轉換為實際域名地址
		    proxy_set_header X-real-ip $remote_addr;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_connect_timeout 15s;
        }
	      #8080管理後臺
          location /admin/ {
		    alias /usr/workspace/shiroSSO;
                     proxy_pass http://127.0.0.1:8080/admin/;
                     proxy_set_header X-real-ip $remote_addr;
                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_connect_timeout 15s;
         }
		 #配置靜態資源 解決js css檔案無法載入無法訪問的問題,注意末尾不能有 /
			#正則匹配css檔案,防止css:404
			#多個專案css檔案,可以根據專案路徑進行匹配
          location ~ .*(/admin).*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
                      proxy_pass http://127.0.0.1:8080; #匹配實際埠地址(不需要加入專案名)
					  
                     }
		 location ~ .*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
		   proxy_pass http://127.0.0.1:8001;
		 }

        #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;
        }
 
    }

 

    # HTTPS server 這裡是配置ssl證書,需新增對應ssl模組
    #
    server {
        listen       443 ssl;
        server_name  www.simonjia.top;

       ssl_certificate      /usr/tools/nignx/ssl/xx.crt; #新增ssl證書
       ssl_certificate_key  /usr/tools/nignx/ssl/xx.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
      	  #  proxy_pass   https://www.simonjia.top;
        }
		#8080管理後臺
          location /admin/ {
		    alias /usr/workspace/shiroSSO;
                     proxy_pass http://127.0.0.1:8080/admin/;
                     proxy_set_header X-real-ip $remote_addr;
                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_connect_timeout 5s;
         }
		#配置靜態資源 解決js css檔案無法載入無法訪問的問題,注意末尾不能有 /
          location ~ .*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
                      proxy_pass http://127.0.0.1:8080;
                     }
    }

}

cd /usr/local/nginx/sbin
./nginx -s reload

重新載入nginx配置檔案,熱部署,不用重啟。