Nginx配置https和域名转发
在我的Docker内网中,有一个服务:http://172.18.0.3:9000,我如何才能在公网上通过域名访问到这个服务呢?Nginx可以帮我做。
直接贴配置:
server {
listen 80;
server_name xxx.xxxx.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name xxx.xxxx.com;
ssl_certificate /etc/nginx/conf.d/cert/portainer.goodboytxb.com/cert1.pem;
ssl_certificate_key /etc/nginx/conf.d/cert/portainer.goodboytxb.com/privkey1.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.18.0.3:9000;
}
}
-
server_name xxx.xxxx.com; :是监听的解析到当前服务器的域名,一般单独的一个服务用一个子域名去映射,这里需要在域名的DNS管理中添加一个xxx的子域名解析的A记录。
-
rewrite ^(.*)$ https://$host$1 permanent; :这一句是80端口下的请求统一重写为https,即将http的请求强制转换成https
-
ssl_certificate /etc/nginx/conf.d/cert/portainer.goodboytxb.com/cert1.pem; ssl_certificate_key /etc/nginx/conf.d/cert/portainer.goodboytxb.com/privkey1.pem; # 这两句的是指定https的证书和私钥的位置,https必须需要证书
-
location / { proxy_pass http://172.18.0.3:9000; } #通过443端口的流量统一转发到 http://172.18.0.3:9000;
此时通过 xxx.xxxx.com 就可以对应的访问到 http://172.18.0.3:9000
配置文件 xxx.xxxx.com.conf 需要放到nginx的conf.d文件夹下,conf.d是Nginx的默认配置文件夹,这个目录是在Nginx.conf中配置的。
http://172.18.0.3:9000是docker中的内网ip,这里也可以用容器名的方式访问,比如容器名是portainer,配置成http://portainer:9000也是可以访问到的。