DMZ區有一臺前置機器A,後端一臺服務器爲應用系統B,另外一臺爲數據庫服務器C。
準備在A上配置反向代理服務器B。php
在A上配置nginx的反向代理,最初調整配置文件以下:css
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8523; server_name 10.23.65.111; location / { index index.php index.html index.htm; proxy_pass http://10.23.65.131:8080/js1/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } location ~ .*\.(js|css)$ { proxy_pass http://10.23.65.131:8080; } add_header X-Via $server_addr; add_header X_cache_hit $upstream_cache_status; } }
下面配置中的URI是否須要加"/"。按以往配置是不加的,可是後端B用了tomcat的虛擬路徑,指定訪問/js1後會自動變爲/js1/。因此此處配置時增長了"/"html
location / { index index.php index.html index.htm; proxy_pass http://10.23.65.131:8080/js1/; }
加載頁面時發現js/css靜態文件的沒法加載,請求路徑變爲了「http://10.23.65.111/js1/xxx.js」,因此考慮修改如下內容:nginx
location ~ .*\.(js|css)$ { proxy_pass http://10.23.65.131:8080/js1/; }
但修改後發現nginx啓動報錯,提示使用正則表達式時候不能使用URI的請求方式。因此按照靜態資源部署方式,在A服務器上部署靜態資源,路徑與B上保持了一致,以下所示:es6
location ~ .*\.(js|css)$ { root E:\software\es6tutorial-gh-pages; }
配置後訪問正常正則表達式
若是還想使用proxy_pass怎麼辦?因而嘗試修改location,以下所示:數據庫
location /js/$ { proxy_pass http://10.23.65.131:8080; }
配置後訪問正常後端
想嘗試使用rewrite的方式配置js/css,可是沒有嘗試成功,後續待測試tomcat
location ~ .*\.(js|css)$ { rewrite ??? proxy_pass http://10.23.65.131:8080; }
舉例說明:DMZ區服務器A的內網地址測試爲10.23.65.111:8523,映射公網測試爲IP:PortA。曾經出現過公網訪問時IP:PortA變爲了IP:8523的狀況,本次測試卻沒出現,不知道具體是哪裏配置除了問題,待觀察。
PS:網上有說能夠在配置變爲以下形式解決此問題,下次出現須要測試。服務器
proxy_set_header Host $host; #修改成 proxy_set_header Host $host:$server_port;