实验目的,将局域网一台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
发表评论