nginx https 域重定向不起作用
我知道圍繞這個主題有很多問題,但我找不到適合我情況的答案。
所以,基本上,我有一個域——比如說 myserver.com——我想要一個用於 Jenkins 的子域,比如:jenkins.myserver.com。另外,我想只允許使用 HTTPS。伺服器是 AWS 中的一個 EC2 實例。我在 EC2 伺服器上安裝了 nginx 來進行設置。
我在我的域名註冊商處設置了一個 URL 轉發:http: //jenkins.myserver.com重定向到 123.123.123.123。這件事似乎有效,發送到域的請求最終到達 EC2 伺服器上的 nginx。
我只有一個(自簽名)SSL 證書,位於 EC2 伺服器上。
我的 nginx 配置:
server { listen 80 default_server; server_name jenkins.myserver.com; return 301 https://$host$request_uri; } server { listen 443; server_name jenkins.myserver.com; ssl_certificate /etc/nginx/cert.crt; ssl_certificate_key /etc/nginx/cert.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/jenkins.access.log; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Fix the “It appears that your reverse proxy set up is broken" error. proxy_pass http://localhost:8080; proxy_read_timeout 90; proxy_redirect http://localhost:8080 https://jenkins.myserver.com; } }
如果我捲曲到 IP 地址,我會很好地重定向到 https,儘管不是域而是 IP。在這裡,當我嘗試不同版本的 nginx 配置時,我注意到與瀏覽器有些不一致。所以目前,在瀏覽器中 123.123.123.123 重定向到https://jenkins.myserver.com(我得到’無法連接’),但不是在 curl 中。
curl -I -L 123.123.123.123 -k HTTP/1.1 301 Moved Permanently Server: nginx/1.10.1 Date: Tue, 14 Feb 2017 20:22:58 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: https://123.123.123.123/ HTTP/1.1 403 Forbidden Server: nginx/1.10.1 (...)
對於我得到的域:
curl -I -L jenkins.server.com HTTP/1.1 200 OK Server: nginx Date: Tue, 14 Feb 2017 20:28:37 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/7.0.15
我究竟做錯了什麼?我需要在域名註冊商處獲得另一份證書嗎?我需要做什麼?
非常感激您的幫忙!
因此,正如 yoonix 所指出的,問題出在域名註冊商 (name.com btw) 上。URL 轉發不起作用。我刪除了它並添加了一個指向我的 IP 的 DNS A 記錄(全是 http),現在它可以正常工作了!謝謝!
您需要為子域設置一個虛擬主機,並且應該將您的預設配置和 xyz.example.com 配置分開。使用附加連結設置虛擬主機。設置虛擬主機後,您將擁有 2 個預設文件和子域 conf。因此,您可以預設處理所有非 https 請求並重定向到 https。
預設
server { listen 80 default_server; listen [::]:80 default_server; if ($http_x_forwarded_proto != 'https') { rewrite ^(.*) https://$host$1 redirect; } }
子域
server { server_name abc.xyz.co; listen 443; ssl on; ssl_certificate /etc/ssl/certs/local.pem; ssl_certificate_key /etc/ssl/certs/local.key; # Add index.php to the list if you are using PHP index index.html index.htm; location / { #Do Whatever you want.... } }
如果要將 IP 自動重定向到 dns,則還需要修改預設域和子域。 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts--3