nginx反向代理配置

系統環境

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

問題1

下面配置中的URI是否須要加"/"。按以往配置是不加的,可是後端B用了tomcat的虛擬路徑,指定訪問/js1後會自動變爲/js1/。因此此處配置時增長了"/"html

location / {
    index index.php index.html index.htm;
    proxy_pass http://10.23.65.131:8080/js1/; 
}

問題2

加載頁面時發現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;
}

配置後訪問正常正則表達式

問題3

若是還想使用proxy_pass怎麼辦?因而嘗試修改location,以下所示:數據庫

location /js/$ {
    proxy_pass   http://10.23.65.131:8080;
}

配置後訪問正常後端

問題4

想嘗試使用rewrite的方式配置js/css,可是沒有嘗試成功,後續待測試tomcat

location ~ .*\.(js|css)$ {
    rewrite ???
    proxy_pass   http://10.23.65.131:8080;
}

問題4

舉例說明: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;
相關文章
相關標籤/搜索