一个IP配置多个https地址转发(Nginx转发多个https)

引言

        公司只有一个公网IP,要实现将多个域名的https请求转发到内部。

        例如:

        https://www.example.com 转发至内网192.168.0.10服务器443端口

        https://www.test.com 转发至内网192.168.0.20服务器443端口

配置dns解析

        我是在阿里云上购买的域名,所以就直接在阿里云云解析DNS工作台下配置了对应域名解析,具体操作可以看阿里云相关文档。

        配置将https://www.example.com 和 https://www.test.com转发到公司主路由器443端口,然后将443端口的请求转发到指定nginx服务器。

SSL证书

        建议直接上阿里云,每个账号可以有20个免费的证书,申请之后下载nginx对应的压缩包即可。

        自签的证书也可以 。

配置nginx

        增加多个server配置即可,每个server监听不同的域名。配置不同的证书,转发到不同的内网地址即可。

        http块具体配置如下:

        

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    client_max_body_size 100m;
    client_body_timeout     5m;
    proxy_connect_timeout     60s;
    proxy_read_timeout      5m;
    proxy_send_timeout      5m;
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
   
   #将普通http请求rewrite为https请求
   server {
       listen       80;
       server_name  www.example.com;
       rewrite ^(.*)$ https://${server_name}$1 permanent;
    }
    
    server {
       listen       80;
       server_name  www.test.com;
       rewrite ^(.*)$ https://${server_name}$1 permanent;

    }
    # https请求转发规则  
    server {
       listen       443 ssl;
       # 需要匹配转发规则的域名
       server_name  www.example.com;
       # 前面申请到的免费ssl证书,要与监听的server_name一致
       ssl_certificate /usr/local/src/cert/example.com.pem;
       ssl_certificate_key /usr/local/src/cert//example.com.key;
       ssl_session_cache   shared:SSL:1m;
       ssl_session_timeout  5m;
       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;
       location / {
           # www.example.com的https请求转发到192.168.0.10:443
           proxy_pass https://192.168.0.10:443;
       }
    }
    # 与上面配置逻辑一样,将配置的内容换成第二个域名的即可
     server {
       listen       443 ssl;
       server_name  www.test.com;
       ssl_certificate /usr/local/src/cert/test.com.pem;
       ssl_certificate_key /usr/local/src/cert/test.com.key;
       ssl_session_cache   shared:SSL:1m;
       ssl_session_timeout  5m;
       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;
       location / {
           proxy_pass https://192.168.0.20:443;
       }
    }
    }

        配置完成,启动即可。

踩坑

        配置完成后,nginx转发时一直报错:

        .......connect() to 192.168.0.10:443 failed (13: Permission denied) while connecting to upstream........

        多次尝试之后发现问题出在selinux上。

        查看selinux

[root@dev-server ~]# getenforce

如果结果是enforcing,使用以下命令临时关闭

[root@dev-server ~]# setenforce 0

或者修改配置文件永久生效

[root@dev-server ~]# vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled

设置后需要重启才能生效

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值