家庭宽带是屏蔽了80/443端口访问的,所以如果想要从外面访问内部的nginx服务器,就必须使用其他端口。可以使用nginx反向代理将对特定端口(如8080)的访问重定向至内部的80端口,如下:
server { listen 8080 default_server; listen 8443 default_server ssl http2; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_pass https://127.0.0.1:443; } error_page 497 https://$host:8443$request_uri; }
然而部分网页会在跳转的时候丢失端口号8080,转而直接访问80端口。80端口当然是无法访问的,这就会出现问题。这时候需要这么修改:
location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect https://$host https://$host:$server_port; proxy_pass https://127.0.0.1:443; }
proxy_redirect语句的作用是将返回的数据从https://$host改为https://$host:$server_port。
部分情况下需要动态修改静态页面上的导航链接,可以在页面上加入以下代码(via:sf)
<script> if(location.port != "") $(document).on('click', 'a:not([data-bypass])', function(e) { var $target = $(e.target), href = $target.attr('href'); if (/^(http(s)?:)?\/\/.*\这里写你的根域名/.test(href)) { $target.attr('href', href+":"+location.port); } // 把检查过的 <a> 标记一下,以后就不会再次做检查 $target.attr('data-bypass', 'bypass'); }); <script>
0 条评论