多個服務部署在同一個服務器,使用不同的端口。
一、目標需求
- 如果不想帶上端口號,就只能訪問 80 或 443 端口。
- 可以用過二級目錄區分服務,通過反向代理轉發到不同的 Server。
- 可以用過子域名區分服務,通過反向代理轉發到不同的 Server。
二、現狀評估
- 對於不帶端口號訪問,以我目前的經驗來看,找不到其它更好的方法,只能使用 80 或 443 端口。
- 使用二級目錄區分服務,可行性很大。
- 能通過二級目錄名,明確區分服務。
- 可是和直接使用端口號差別不大,只是把辨別服務的方法,從端口號變成了二級目錄名。
- 可能導致 url 過長。
- 還是沒有什么美觀性。
- 使用子域名區分服務,可行性與二級目錄相差無幾。
- 能通過子域名,明確區分服務。
- 具有一定的美觀性。
三、解決方案
使用子域名區分服務 的方式,然后使用 nginx 做反向代理,分發到不同的端口。
1、找到nginx的配置文件
打開nginx的配置文件,打開 /安裝路徑/conf/nginx.conf,進行配置
2、修改配置
server { listen 80; server_name *.abc.com; if ($http_host ~* "^(.*?)\.abc\.com$") { #正則表達式 set $domain $1; #設置變量 } location / { if ($domain ~* "shop") { proxy_pass http://abc.com:3001; #域名中有shop,轉發到3001端口 } if ($domain ~* "mail") { proxy_pass http://abc.com:3002; #域名中有mail,轉發到3002端口 } tcp_nodelay on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以上三行,目的是將代理服務器收到的用戶的信息傳到真實服務器上 root html; index index.html index.htm; #默認情況 } }