Nginx配置多个域名指向不同的端口
<h2>一、前言</h2><p>很多时候我们都会在同一个服务器上部署多个项目,我们有多个域名的情况下,怎么样使不同的域名都通过80端口来访问呢?打个比方说,现在有2个域名,分别是:tessai.cn 和 admin.tessai.cn 。tessai.cn 访问可以访问到一个web地址,admin.tessai.cn 可以访问到后台管理的项目。这个如果监听不同的端口来实现,肯定是很方便的,比如说一个使用 8080 端口,一个使用 80 端口,然后再使用 nginx 监听不同的端口就行了。但是这样不是我们想要的效果呀。谁访问网站喜欢使用域名加端口来访问呢。这篇博客主要是记录一下怎么使用 nginx 监听同一个端口,访问不同的服务,顺便记录一下 Java 后台怎么获取到访问的 IP。</p>
<h2>二、正文</h2>
<p>1、nginx 中配置如下</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="1">
<pre class="cke_widget_element" data-cke-widget-data="{&quot;lang&quot;:&quot;bash&quot;,&quot;code&quot;:&quot;http { \n\n ...\n\n server {\n listen 80;\n\t proxy_set_headerX-Real-IP$remote_addr; #记录远程访问ip,方便应用中获取 \n server_nametessai.cn;\n location / {\n proxy_pass http://127.0.0.1:8080; #将域名为tessai.cn的请求分发到本地8080端口的服务\n }\n }\n server {\n listen 80;\n\t proxy_set_headerX-Real-IP$remote_addr; #记录远程访问ip,方便应用中获取\n server_nameadmin.tessai.cn; \n location / {\n proxy_pass http://127.0.0.1:8081; #将域名为admin.tessai.cn的请求分发到本地8081端口的服务\n }\n }\n}\n&quot;,&quot;classes&quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-bash hljs">http {
...
server {
listen 80;
proxy_set_headerX-Real-IP<span class="hljs-variable">$remote_addr; <span class="hljs-comment">#记录远程访问ip,方便应用中获取
server_nametessai.cn;
location / {
proxy_pass http://127.0.0.1:8080; <span class="hljs-comment">#将域名为tessai.cn的请求分发到本地8080端口的服务
}
}
server {
listen 80;
proxy_set_headerX-Real-IP<span class="hljs-variable">$remote_addr; <span class="hljs-comment">#记录远程访问ip,方便应用中获取
server_nameadmin.tessai.cn;
location / {
proxy_pass http://127.0.0.1:8081; <span class="hljs-comment">#将域名为admin.tessai.cn的请求分发到本地8081端口的服务
}
}
}
</span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" data-cke-widget-drag-handler="1"></span></div>
<p>2、由于使用了nginx作为代理,在后台应用服务中直接采用<code>request.getRemoteAddr()</code>,无法获取到请求所处的真实ip,需要通过下面的代码获取:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="0">
<pre class="cke_widget_element" data-cke-widget-data="{&quot;lang&quot;:&quot;java&quot;,&quot;code&quot;:&quot;private String getIpAddr(HttpServletRequest request) {\n String ip = request.getHeader(\&quot;X-Real-IP\&quot;);\n if (ip == null || ip.length() == 0 || \&quot;unknown\&quot;.equalsIgnoreCase(ip)) {\n ip = request.getHeader(\&quot;x-forwarded-for\&quot;);\n }\n\n if (ip == null || ip.length() == 0 || \&quot;unknown\&quot;.equalsIgnoreCase(ip)) {\n ip = request.getHeader(\&quot;Proxy-Client-IP\&quot;);\n }\n\n if (ip == null || ip.length() == 0 || \&quot;unknown\&quot;.equalsIgnoreCase(ip)) {\n ip = request.getHeader(\&quot;WL-Proxy-Client-IP\&quot;);\n }\n\n if (ip == null || ip.length() == 0 || \&quot;unknown\&quot;.equalsIgnoreCase(ip)) {\n ip = request.getRemoteAddr();\n }\n return ip;\n}\n&quot;,&quot;classes&quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-java hljs"><span class="hljs-function"><span class="hljs-keyword">private String <span class="hljs-title">getIpAddr<span class="hljs-params">(HttpServletRequest request) {
String ip = request.getHeader(<span class="hljs-string">"X-Real-IP");
<span class="hljs-keyword">if (ip == <span class="hljs-keyword">null || ip.length() == <span class="hljs-number">0 || <span class="hljs-string">"unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader(<span class="hljs-string">"x-forwarded-for");
}
<span class="hljs-keyword">if (ip == <span class="hljs-keyword">null || ip.length() == <span class="hljs-number">0 || <span class="hljs-string">"unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader(<span class="hljs-string">"Proxy-Client-IP");
}
<span class="hljs-keyword">if (ip == <span class="hljs-keyword">null || ip.length() == <span class="hljs-number">0 || <span class="hljs-string">"unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader(<span class="hljs-string">"WL-Proxy-Client-IP");
}
<span class="hljs-keyword">if (ip == <span class="hljs-keyword">null || ip.length() == <span class="hljs-number">0 || <span class="hljs-string">"unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
<span class="hljs-keyword">return ip;
}
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" data-cke-widget-drag-handler="1"></span></div>
<h2>三、结尾</h2>
<p>本文到此结束,如果想看更多精彩好文,福利图片,可移步:http://wjhsmart.vip。建站不易,大家可以互踩哦,如果有需要博主互联的可以给博主留言。</p><br><br>
来源:https://www.cnblogs.com/wjhsmart/p/13366504.html
頁:
[1]