我知道围绕这个主题有很多问题,但我找不到适合我的情况的答案。
因此,基本上,我有一个域名 - 假设为 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