nginx https 域名重定向不起作用

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;
    }
  }

如果我使用 curl 访问 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

我做错了什么?我需要在域名注册商处再申请一份证书吗?我需要做什么?

非常感激你的帮助!

答案1

因此,正如 yoonix 指出的那样,问题出在域名注册商(顺便说一下,name.com)上。URL 转发不起作用。我删除了它并添加了指向我的 IP(全部为 http)的 DNS A 记录,现在它就可以正常工作了!谢谢!

答案2

您需要为子域设置虚拟主机,并应将默认配置和 xyz.example.com 配置分开。使用附加链接设置虚拟主机。设置 vhost 后,您将拥有 2 个文件 default 和 subdomain 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

相关内容