Running Confluence behind NGINX with SSL
中文標題【運行 Confluence 在 SSL 配置后的 NGINX】
這個頁面描述了如何為 Confluence 配置 NGINX 的反向代理。
這個頁面中的配置結果將會影響到下面 2 個配置情況:
- 外部客戶連接到 NGINX 使用安全的 SSL。在 NGINX 和 Confluence 服務器之間的連接不是安全的。
- Confluence 服務器和 NGINX 運行在同一個機器中。
本頁中的內容:
我們假定你已經運行了 NGINX 實例。如果你還沒有安裝運行 NGINX 實例,請參考 NGINX documentation 文檔中的內容來下載安裝 NGINX。SSL 的證書也必須安裝到 NGINX 運行的服務器上。你需要安裝支持 WebSockets 的 NGINX 版本(1.3 或者后續版本)。
如果你的項目小組還計划使用 Confluence 的移動 app 版本,你還需要讓你的證書從 CA(Certificate Authority) 授信。你不能在你的移動 APP 上使用自己簽發的證書或者沒有從 CA 授信的證書。
Atlassian Support 不能提供有關第三方工具的配置,例如 NGINX。如果你在配置的時候遇到了任何問題,請參考 NGINX 的文檔,或者訪問 Atlassian Community 或者從我們的 Solution Partner 合作伙伴處獲得幫助。
1:設置上下文路徑
如果你不希望通過上下文來訪問你的 Confluence 安裝實例(www.example.com),或者你是直接通過子域名來訪問的(confluence.example.com),你可以跳過這一步的配置。
在 Tomcat 中設置你 Confluence 應用程序的路徑(位於主機名和端口后的路徑)。編輯 <installation-directory>/conf/server.xml,這部分內容在 "Context" 中定義:
<Context path="" docBase="../confluence" debug="0" reloadable="false">
然后修改為:
<Context path="/confluence" docBase="../confluence" debug="0" reloadable="false">
在這個示例中,我們已經使用了 /confluence 為上下文的路徑。請注意,你不能使用 /resources 為你的上下文路徑,因為在 Confluence 中使用這個路徑用於定位資源,如果你使用這個路徑的話將會在后面導致錯誤。
重啟 Confluence,然后檢查你是否可以訪問 http://example:8090/confluence
2:配置 Tomcat 連接器
在相同的 <installation-directory>conf/server.xml 文件中,使用示例的連接器為啟動點。
注釋掉默認的連接器(針對不需要代理的訪問)。
Show me how to do this...
在 XML 文件中,注釋是以 <!-- 開始的,以 --> 結束的。注釋掉的部分在 Confluence 應用程序讀取配置文件的時候將會忽略。
添加 <!-- 和 --> 到默認的連接器。文件現在應該看起來如下所示。
<!--
========================================================
DEFAULT - Direct connector with no proxy, for unproxied HTTP access to Confluence.
========================================================
-->
<!--
<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
maxThreads="48" minSpareThreads="10"
enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11NioProtocol"/>
-->
取消 HTTPS - Proxying Confluence via Apache or Nginx over HTTPS 中間的注釋。
Show me how to do this...
取消注釋的部分,你只需要刪除 <!-- 和 --> 包含的連接器注釋就可以了。
下面顯示的是默認連接器被注釋掉,但是 HTTPS 連接器沒有被注釋。頭部同時保留注釋。
<!--
========================================================
DEFAULT - Direct connector with no proxy, for unproxied HTTP access to Confluence.
========================================================
-->
<!--
<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
maxThreads="48" minSpareThreads="10"
enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11NioProtocol"/>
-->
...
<!--
========================================================
HTTPS - Proxying Confluence via Apache or Nginx over HTTPS
========================================================
-->
<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
maxThreads="48" minSpareThreads="10"
enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true" proxyName="<subdomain>.<domain>.com" proxyPort="443"/>
插入你的 代理名(proxyName)和 代理端口(proxyPort )如下行顯示的內容:
<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
maxThreads="48" minSpareThreads="10"
enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true" proxyName="www.example.com" proxyPort="443"/>
請確定你已經為你的協議和代理名稱配置了爭取的值。
3:配置 NGINX
你需要在你的的 NGINX 服務器中指定一個監聽服務器,如下面的示例內容。同時添加下面的內容到你的 NGINX 配置中。
替換你 SSL 證書和 key 為你的服務器名稱。
在這個示例中,用戶將要連接到 Synchrony,這個服務運行直接協作編輯。
server {
listen www.example.com:80;
server_name www.example.com;
listen 443 default ssl;
ssl_certificate /usr/local/etc/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-
AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-
AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-
ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-
RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-
SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-
SHA:!DSS';
ssl_prefer_server_ciphers on;
location /confluence {
client_max_body_size 100m;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8090/confluence;
}
location /synchrony {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8091/synchrony;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
請參考 https://nginx.org/en/docs/http/ngx_http_proxy_module.html 來獲得更多的信息。
備注:如果你現在正在配置 SSL 和 Confluence 到一個相同的服務器上,如上面的內容所示,請不要包含 ssl 配置。
如果你不確定在那里包含 ssl_ciphers,請參考頁面 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 中的內容,這里的內容能非常有用。
如果你遇到了 413 Request Entity Too Large 的錯誤,請確定 /confluence 中的 client_max_body_size 塊內容與 Confluence 的 maximum attachment size 配置的大小是相同的。如果你在對大頁面進行編輯的時候遇到了錯誤,你可能還需要增加 /synchrony 中配置的 client_max_body_size 大小。
如果你計划使用 Confluence 的移動 app...
如果你允許在 Confluence 使用移動 app,同時你還配置了你的 Confluence 上下文,如上面的配置所示,你可能還需要添加下面的行到你的 nginx 配置中。
location /server-info.action {
proxy_pass http://localhost:8090/confluence/server-info.action;
}
如果你通過子域名來訪問 Confluence ...
如果你已經通過子域名來訪問 Confluence ,你的配置看起來如下所示:
server {
listen confluence.example.com:80;
server_name confluence.example.com;
listen 443 default ssl;
ssl_certificate /usr/local/etc/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-
AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-
AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-
ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-
RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-
SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-
SHA:!DSS';
ssl_prefer_server_ciphers on;
location / {
client_max_body_size 100m;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8090;
}
location /synchrony {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8091/synchrony;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
4:重啟 Confluence 和 NGINX
- 重啟 Confluence 和 NGINX 來讓配置生效。
- 更新 Confluence 的基礎 URL 來確定你在上下文問中設置的路徑,請參考 Configuring the Server Base URL 頁面中的內容。