1. 程式人生 > 其它 >Nginx配置https和域名轉發

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;
    }
}
  1. server_name xxx.xxxx.com; :是監聽的解析到當前伺服器的域名,一般單獨的一個服務用一個子域名去對映,這裡需要在域名的DNS管理中新增一個xxx的子域名解析的A記錄。

  2. rewrite ^(.*)$ https://$host$1 permanent; :這一句是80埠下的請求統一重寫為https,即將http的請求強制轉換成https

  3. 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必須需要證書
    
  4. 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也是可以訪問到的。