最近在項目中使用nginx反向代理,根據不一樣的請求路徑,將請求分發到不一樣服務。下面的示例主要完成以下功能html
建立文件夾:/root/web/prod,/root/web/test;分別上傳一個index.html文件,文件內容分別爲:prod, test。nginx
修改/usr/local/nginx/conf/nginx.conf文件,在http節點下新增以下兩個節點:web
1 //模擬prod服務 2 server { 3 listen 8081; 4 server_name localhost; 5 6 location / { 7 root /root/web/prod; 8 } 9 } 10 11 //模擬test服務 12 server { 13 listen 8082; 14 server_name localhost; 15 16 location / { 17 root /root/web/test; 18 } 19 }
nginx反向代理主要使用指令「proxy_pass」,反向代理服務節點配置以下,瀏覽器
1 server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 root html; 7 index index.html index.htm; 8 } 9 10 location /prod/ { 11 proxy_pass http://localhost:8081/; 12 } 13 14 location /test/ { 15 proxy_pass http://localhost:8082/; 16 } 17 }
保存修改後的配置文件,從新加載nginx.conf文件url
1 /usr/local/nginx/sbin/nginx -s reload;
在瀏覽器中訪問:http://ip/prod, htpp://ip/test, 分別顯示prod, test字符串。spa
在nginx中配置proxy_pass時,若是是按照^~匹配路徑時,要注意proxy_pass後的url最後的/。當加上了/,至關因而絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;若是沒有/,則會把匹配的路徑部分也給代理走代理
1 location /prod/ { 2 proxy_pass http://localhost:8081/; 3 }
如上面的配置,若是請求的url是http://ip/prod/1.jpg會被代理成http://localhost:8081/1.jpgcode
location /prod/ { proxy_pass http://localhost:8081; }
如上面的配置,若是請求的url是http://ip/prod/1.jpg會被代理成http://localhost:8081/prod/1.jpgserver
在使用proxy_pass進行反向代理配置時,必定要多注意是否須要加"/",該問題已經犯了不少次了,切忌,特別感謝以下參考的文章:proxy_pass根據path路徑轉發時的"/"問題記錄htm