Nginx進行反向代理多個web專案
阿新 • • 發佈:2020-07-21
反向代理:
客戶端(瀏覽器)不直接訪問目標伺服器,而是通過代理伺服器進行訪問,
可以不暴露目標伺服器實際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配置檔案,熱部署,不用重啟。