Nginx

nginx https 域重定向不起作用

  • February 16, 2017

我知道圍繞這個主題有很多問題,但我找不到適合我情況的答案。

所以,基本上,我有一個域——比如說 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

引用自:https://serverfault.com/questions/832562