需求
nginx 服務器代理前端頁面,並且反代后端服務器。開發時使用沒有什么問題,部署后存在同樣請求根地址的情況(當然可以針對一級后端地址寫多個配置,但是我懶……)。想起來之前查過這個重寫的方案。
一般反向代理
一般會定義一個統一前綴,比如:api,則配置如下
server {
listen 80;
server_name default;
location /api/ {
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_set_header X-NginX-Proxy true;
proxy_pass http://example.com;
}
}
則請求到 /api/exampleapi
時,會轉發到 http://example.com/api/exampleapi
。
設置proxy_pass即可。請求只會替換域名。
但我的情況是本來打算前后端放在一起,所以 server 那邊並沒有加 api
這個前綴。所以要將 /api/exampleapi
轉發到 http://example.com/exampleapi
,則可按照如下兩種配置。
- 方案一 在 proxy_pass 后增加
/
則 nginx 會將/api
之后的內容拼接到 proxy_pass 之后。
server {
listen 80;
server_name default;
location /api/ {
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_set_header X-NginX-Proxy true;
proxy_pass http://example.com/;
}
}
方案二 使用 rewrite,注意到 proxy_pas s結尾沒有 /
, rewrite 重寫了 url。
server {
listen 80;
server_name default;
location /api/ {
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_set_header X-NginX-Proxy true;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://example.com;
}
}
關於 rewrite
syntax: rewrite regex replacement [flag]
Default: —
Context: server, location, if