我一直试图更改 Atlassian 堆栈中的基本 URL,但收效甚微。Ubuntu 服务器 16.04LTS 带有 Nginx 反向代理。内部和外部 IP 分配给不同的 NIC。是的,这个问题也发布在 stackoverflow 上,但我想我会尝试最大限度地提高这个问题的曝光率。
示例 Nginx 服务器文件:
server {
listen 80;
listen 443 ssl;
server_name projects.old-site.com;
access_log off;
return 301 $scheme://projects.new-site.com;
}
server {
listen 80;
server_name projects.new-site.com;
access_log off;
client_max_body_size 100M;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name projects.new-site.com;
client_max_body_size 100M;
ssl_certificate /path/to/new-site.crt;
ssl_certificate_key /path/to/new-site.key;
location /
...output omitted
有效的方法:HTTP 重定向和 HTTP 到 HTTPS 重定向。http://projects.old-site.com正确重定向至https://projects.new-site.com. 只需输入即可直接访问http://projects.new-site.com(也正确重定向到 HTTPS)。
不可以做的:https://projects.old-site.com到https://projects.new-site.com重定向。
更奇怪的是,当尝试访问https://projects.old-site.com为了测试重定向,浏览器不仅仍可使用 .old-site.com,而且还可使用该域名的过期 SSL 证书。
在我的系统中,此服务器上的过期证书无处可访问。我遵循了 Atlassian URL 更新指南,仅更改了 server.xml 文件,并从应用程序管理屏幕(当它们可访问时)内进行更改。所有 DNS 服务器都指向正确的 IP。我肯定错过了什么,但我不知所措。这在安装了 Nginx 和相同版本的 Atlassian 软件的两台不同的 Ubuntu 16.04 服务器上重复出现。
请帮忙。
答案1
您的配置遇到了一些问题。
我们将在这里分别介绍每个单独的服务器块。
块 #1:projects.old-site.com -> projects.new-site.com 重定向
这是您向我们提供的信息:
server {
listen 80;
listen 443 ssl;
server_name projects.old-site.com;
access_log off;
return 301 $scheme://projects.new-site.com;
}
你缺少了很多此处的配置内容:
ssl_certificate
指令 - 需要知道为域名提供什么 SSL 证书。ssl_certificate_key
指令 - 与“旧”项目站点的 SSL 证书相对应的 SSL 证书密钥文件。
你正在进行 301 重定向以匹配该方案,但如果你在服务器块 2 中将非 SSL 定向到 SSL,为什么要这样做?只需重定向到 HTTPS 站点,和包括的$request_uri
原因很明显(您没有传递相同的请求 URI,所以事情无法正常工作)。
你的正确的此处的服务器块应更类似于此:
server {
listen 80;
listen 443 ssl;
server_name projects.old-site.com;
ssl_certificate /path/to/valid/projects.old-site.com/certificate;
ssl_certificate_key /path/to/valid/projects.old-site.com/certificate.key;
access_log off;
return 301 https://projects.new-site.com$request_uri;
}
块 #2:projects.new-site.com 的 http -> https 重定向
您给了我们这个:
server {
listen 80;
server_name projects.new-site.com;
access_log off;
client_max_body_size 100M;
return 301 https://$host$request_uri;
}
这里没有太多问题,但让我们尝试一下不是在这里全局接受$host
(我们不需要它,我们知道我们希望它最终在哪里),我们也不需要client_max_body_size
。 301 重定向无论如何都不会尊重这一点。
你应该最终结果如下:
server {
listen 80;
server_name projects.new-site.com;
access_log off;
return 301 https://projects.new-site.com$request_uri;
}
第 3 部分:https://projects.new-site.com
现在进入第三个区块。 *如果没有整个服务器块及其所有配置指令,我们就无法正确协助配置该块。
您给了我们这个:
server {
listen 443 ssl;
server_name projects.new-site.com;
client_max_body_size 100M;
ssl_certificate /path/to/new-site.crt;
ssl_certificate_key /path/to/new-site.key;
...
}
这个区块没有什么问题,但是除非你需要您的后端应用程序的指令client_max_body_size
,您可能应该将其删除。