當我們在一台服務器上 啟動多個服務時, 因為在 http 協議下默認端口是 80 端口, https 下默認是 443 端口,為了好記和美觀我們 只能對外暴漏
這兩個端口。
以 http
協議 為例
假設我 有個后台服務在 127.0.0.1:3000
這個服務里面有個接口 /aaa/bbb
如果你的 后台服務啟動到 3000
端口
http://xxxx.com:3000/aaa/bbb
這樣也是可以訪問的但是,不好記也不美觀.
訪問時 希望
http://xxxx.com/api/aaa/bbb
或
http://api.xxxx.com/aaa/bbb
所以我們得 讓 Nginx
啟動到 80
端口上, 然后 Nginx
通過 /api
前綴 或 二級域名
來進行代理到 目標服務
nginx.conf 配置
nginx.conf
...
http {
...
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
...
# api 前綴代理 配置代碼
# 將 /api/ 接口代理到 node 服務 127.0.0.1:3000/
# /api/ 回被 替換成 / 這樣到 目標服務器時 path 中就沒有 /api 了
location /api/ {
proxy_pass http://127.0.0.1:3000/;
}
...
}
...
# 二級域名代理 配置代碼
# 將 api.kycloud.xyz 域名 代理到 后台接口服務 127.0.0.1:3000
server {
listen 80;
server_name api.ykcloud.xyz;
# 訪問日志 訪問這個域名的日志 都會被記錄到 nginx 目錄下的 logs/api.ykcloud.access.log 下
# 這里如果不指定單獨的 log 文件, nginx 也會有一個總的(有請求進來) log文件 logs/access.log
# 所以 如果不想單獨記錄這里可以注釋
# access_log logs/api.ykcloud.access.log;
location / {
proxy_pass http://127.0.0.1:3000;
# 其它代理配置
# 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;
}
}
...
}
實際中這兩種方式選擇一種就可以了.
還想到一種 代理方式就是 通過 正則表達式
配置 非靜態資源代理到 后端服務
. 我比較喜歡通過 二級域名
進行代理,這個就先不研究了.
附: location 配置模式