Centos7使用nginx做内网https代理

实验目的,将局域网一台nodejs服务器通过公网域名访问。

1、Windows服务器一台,上面安装了nodejs Web服务器,通过IP+端口号访问,例如172.16.16.100:3000

2、域名一个,已申请了SSL证书,并且有crt及key文件用于配置https.

3、Centos7.9服务器一台,IP地址172.16.16.114/24,通过爱快网关上网

4、爱快网关一个,上面配置了可在全球任意地方访问的公网IP地址

原理,先在阿里云控制面板的云解析上做DNS解析,将域名到爱快网关的公网IP地址上。云解析用子域名,比如新建主机A记录test到主域名qiye.com,实现test.qiye.com访问,由于主域名购买了证书,因此子域名可以使用主域名的证书。然后解析到爱快网关之后,再在爱快网关上做两个端口映射,将局域网centos7的IP地址80和443端口映射到公网IP上的80和443端口。

1、阿里云做子域名解析

2、爱快做端口映射,将内网IP的80和443端口映射到Wan口的80和443端口。

3、配置Centos7的nginx反向代理和https

编辑hosts文件,由于公网DNS解析不能轻易改,因此先在本地模拟域名解析测试,成功后再改阿里云DNS

vi /etc/hosts

把子域名指向本机centos,模拟DNS已经解析到本机的过程

127.0.0.1 test.qiye.com

接着ping一下

ping test.qiye.com

安装epel源,安装nginx

yum install epel-release -y
yum install nginx -y
nginx

这里不要改nginx.conf主配置文件,直接在conf.d目录下新建一个proxy.conf文件

cd /etc/nginx/conf.d/
vi proxy.conf

4、先配置http的反向代理,配置如下

server {
listen 80; 
#配置域名
server_name test.qiye.com;
#反向代理局域网的nodejs服务器,去掉3000端口号
location / {
proxy_pass http://172.16.16.100:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

配置完毕测试一下

nginx -s reload
curl --head http://test.qiye.com

正常情况下成功会出现一些header信息,如果什么都没有就是不成功

5、接着配置https的

server {
listen 443 http2 ssl default_server;
server_name  test.qiye.com;
配置SSL证书,下面的两行是两个必须的证书文件,crt证书和key密钥文件,先放到nginx的任意目录下,然后这里写绝对路径
ssl_certificate /etc/nginx/conf.d/ssl/test.qiye.com_chained.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/test.qiye.com_com.key;
#其他的附带选项
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#反向代理去掉局域网端口号
location / {
proxy_pass http://172.16.16.100:3000;
proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

配置完毕测试一下

nginx -s reload
curl --head https://test.qiye.com

正常情况下成功会出现一些header信息,如果什么都没有就是不成功

6、最后是整个配置文件,在http的server模块里面加上一条301跳转,强制https访问

server {
listen 80; 
#配置域名
server_name test.qiye.com;
#做301跳转,强制将http跳转到https
return 301 https://$server_name$request_uri;
#反向代理局域网的nodejs服务器,去掉3000端口号
location / {
proxy_pass http://172.16.16.100:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
    
#配置https
server {
listen 443 http2 ssl default_server;
server_name  test.qiye.com;
配置SSL证书,下面的两行是两个必须的证书文件,crt证书和key密钥文件,先放到nginx的任意目录下,然后这里写绝对路径
ssl_certificate /etc/nginx/conf.d/ssl/test.qiye.com_chained.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/test.qiye.com_com.key;
#其他的附带选项
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#反向代理去掉局域网端口号
location / {
proxy_pass http://172.16.16.100:3000;
proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

7、都成功之后,编辑hosts文件,注释掉解析到本地的域名,开始公网测试

vi /etc/hosts

#127.0.0.1 test.qiye.com

8、防火墙放开服务和端口

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload


最后编辑于:2024/03/19作者: admin

发表评论