Nginx80端口转发+域名——实现IP+端口隐藏

vicat
发布于 2020-09-30 / 2011 阅读
0
0

Nginx80端口转发+域名——实现IP+端口隐藏

安装

Ubuntu

apt-get install nginx

启动

service nginx start|stop|reload|restart

目的

当一台服务器部署多个应用时,当我们访问应用时,需要在浏览器中输入服务器IP+端口号,这并不方便,且语义性极差,想要通过三级域名来访问。

基础

Location指令格式

location [ = | ~ | ~* | ^~ ] uri {...}

  1. =:用于标准uri前,要求请求字符串与uri严格匹配,一旦匹配成功则停止
  2. ~:用于正则uri前,并且区分大小写
  3. ~*:用于正则uri前,但不区分大小写
  4. ^~:用于标准uri前,要求Nginx找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

环境

1台服务服务器 假如IP:192.168.1.10
一个ngnix 使用默认端口为80
Tomcat1 端口为18501 申请域名为: 域名1 对应服务器ip 192.168.1.10
Tomcat2 端口为18502 申请域名为: 域名2 对应服务器ip 192.168.1.10
Tomcat3 端口为18503 申请域名为: 域名3 对应服务器ip 192.168.1.10

nginx配置

配置文件

目录

/etc/ngrok/nginx.conf
在文件中可见,文件include了大部分
2.新建文件 proxy.conf ,进行如下配置

### Tomcat1 ###
server {
    listen 80;
    server_name 域名1【二级/三级】;
    # 这个东西是配置静态页面的
    index index.jsp index.html index.html index.shtml;
    # '/' 代表请求根目录的都走此规则
    location / {
        proxy_pass http://[主机公网IP]:18501;
        #Proxy Settings;
        #proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

### Tomcat2 ###
server {
    listen 80;
    server_name 域名2;
    index index.jsp index.html index.html index.shtml;
    location / {
        proxy_pass http://[主机公网IP]:18502;
        #Proxy Settings;
        #proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

注意:如果在域名中配置了新的子域名,需要将其加入到DNS解析中去。

在某些应用中,超链接的形式是通过模板写入的,所以跳转后仍有端口

备案

在境内建站必然需要备案,并在页面底部挂备案信息。

证书安装

在阿里云申请免费的SSL证书

安装

在虚拟主机的config处添加如下指令

server {
    # https监听443端口
    listen 443 ssl;
    server_name 【证书绑定的域名】;
    ssl_certificate 【证书路径(cert/domain name.pem)】;
    ssl_certificate_key 【证书密钥(cert/domain name.key)】;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
    ssl_prefer_server_ciphers on;
}

注意:某些应用在修改后仍使用Http协议请求数据,此时会发生404等错误。

rewrite

使用正则匹配,如果需要将80端口的数据转发到443,需要在80端口进行监听,然后直接转发到443端口。在老版本的Nginx中,需要写rewrite进行转发。在当前版本推荐的做法是

server {
    listen 80;
    server_name blog.vicat.top;
    return 301 https://blog.vicat.top$request_uri;
}

参考资料

  1. 0mei.Nginx基本功能及其原理.2018.12.09/2020.9.30

评论