Nginx配置多個域名指向不同的端口


一、前言

很多時候我們都會在同一個服務器上部署多個項目,我們有多個域名的情況下,怎么樣使不同的域名都通過80端口來訪問呢?打個比方說,現在有2個域名,分別是:tessai.cn 和 admin.tessai.cntessai.cn 訪問可以訪問到一個web地址,admin.tessai.cn 可以訪問到后台管理的項目。這個如果監聽不同的端口來實現,肯定是很方便的,比如說一個使用 8080 端口,一個使用 80 端口,然后再使用 nginx 監聽不同的端口就行了。但是這樣不是我們想要的效果呀。誰訪問網站喜歡使用域名加端口來訪問呢。這篇博客主要是記錄一下怎么使用 nginx 監聽同一個端口,訪問不同的服務,順便記錄一下 Java 后台怎么獲取到訪問的 IP。

二、正文

1、nginx 中配置如下

http {    

    ...

    server {
        listen       80;
	    proxy_set_header  X-Real-IP  $remote_addr; #記錄遠程訪問ip,方便應用中獲取 server_name tessai.cn; location / { proxy_pass http://127.0.0.1:8080; #將域名為tessai.cn的請求分發到本地8080端口的服務 } } server { listen 80; proxy_set_header X-Real-IP $remote_addr; #記錄遠程訪問ip,方便應用中獲取 server_name admin.tessai.cn; location / { proxy_pass http://127.0.0.1:8081; #將域名為admin.tessai.cn的請求分發到本地8081端口的服務 } } } 

2、由於使用了nginx作為代理,在后台應用服務中直接采用request.getRemoteAddr(),無法獲取到請求所處的真實ip,需要通過下面的代碼獲取:

private String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("x-forwarded-for"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } 

三、結尾

本文到此結束,如果想看更多精彩好文,福利圖片,可移步:http://wjhsmart.vip。建站不易,大家可以互踩哦,如果有需要博主互聯的可以給博主留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM