【Nginx】通過Nginx在同一臺服務器上配置多個二級域名

背景:同個域名下的三個子域名各自綁定了一個項目,每個項目都在自己的tomcat裏運行,而且這三個tomcat都在同一個服務器上。

  • www.portal.a.com
  • www.blog.a.com
  • www.backadmin.a.com

需求:都通過瀏覽器默認的80端口訪問。

問題:我們知道,服務器只有一個80端口,正常情況下一個tomcat會佔用80端口,導致其他監聽不了。

解決方案:Nginx

我們可以更改tomcat監聽的端口,比如tomcat01監聽81,tomcat02監聽82,tomcat03監聽83,然後通過Nginx來監聽80端口,通過server_name的匹配,將請求轉發給各個tomcat

嘗試一:

server {
 
    listen 80;
 
    server_name app.miniguo77.com;
 
    location / {
 
        proxy_set_header X-Real-IP $remote_addr;
 
        proxy_set_header Host $http_host;
 
        proxy_pass http://127.0.0.1:3000; 
    }
}
 
server {
 
    listen 80;
 
    server_name demo.miniguo77.com;
 
    location / { 
        proxy_set_header X-Real-IP $remote_addr;
 
        proxy_set_header Host $http_host;
 
        proxy_pass http://127.0.0.1:3001; 
    }
 
}

這是在網站找的資料,配置看起來沒什麼問題,但是我在嘗試的時候,發現每次請求都被轉發到第一個server那裏去。我也不知道具體原因是什麼,有知道的大神麻煩在下面的評論講解講解。於是有了嘗試二。

嘗試二:

# 監聽80端口,根據二級域名,動態進行轉發
server{
	listen       80;

	server_name  *.a.cn;
	
	if ( $http_host ~* "^(.*?)\.a\.cn" ) {
           set $domain $1;
	}

	location / {
		proxy_set_header X-Real-IP $remote_addr;

		proxy_set_header Host $http_host;

		if ( $domain ~* "portal" ) {
			proxy_pass http://www.portal.a.cn:81;
		}
		if ( $domain ~* "blog" ) {
			proxy_pass http://www.blog.a.cn:82;
		}
		if ( $domain ~* "backadmin" ) {
			proxy_pass http://www.backadmin.a.cn:83;
		}

		# proxy_pass http://www.a.cn:84;
	}
}

這樣就可以通過表達式,動態地匹配二級域名,三級域名也是以此類比。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章