Confluence利用Nginx实现https访问

利用Confluence创建了自己的wiki系统以后,觉得通过http访问显得不是很权威,感觉有点假(小绿锁看多了就会这样)。因此,需要动手将wiki系统改造为https加密的系统。

证书申请

证书的申请非常简单,需要自己拥有一个域名,然后要在这个域名所在的域名注册中心进行解析,校验通过以后就可以导出证书了。关于这申请部分的详细内容,我建议大家读一读我的这篇文章。《利用FreeSSL升级网站系统到HTTPS》

配置Nginx

Nginx中的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
client_max_body_size 100m;

listen 80;
listen 443;

ssl on;
ssl_certificate /usr/local/etc/ssl/wiki.ourclass.com.pem;
ssl_certificate_key /usr/local/etc/ssl/wiki.ourclass.com.key;

server_name wiki.ourclass.com;
access_log /var/log/nginx/wiki.log main;

location / {
proxy_pass http://127.0.0.1:8090/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /synchrony {
proxy_pass http://127.0.0.1:8091;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

# 重定向non-https流量到https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}

注意,上面的路径配置有两个,分别是//synchrony,前者就是wiki的主体,后者是用来检测wiki的URL地址的一个心跳服务。其中,第二个映射/synchrony中的如下配置必须要有,否则前端多人协作的时候就会有一些问题。

1
2
3
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

上述添加的配置是为了保证wiki中的Websocket服务正常运行。

配置Confluence

很多人配置完了上述的系统以后就觉得可以访问了,但是一直会报一个警告就是

无法检测Base URL,是不是存在代理的配置问题

英文版的是

can't check base url warning

这个问题的解决方案除了上述的/stnchrony配置外,还需要加入一个Tomcat的配置,就是要在
<install-directory>/conf/server.xml这个文件里面添加proxyPort和proxyName的配置,如下:

1
2
3
4
5
<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"
proxyName="ourclass.com" proxyPort="443" scheme="https"/>

保存重新启动wiki系统就好了。

总结

这个问题的解决方案还是需要理解confluence的几个核心的组件,然后在根据这些核心的组件进行相应的配置。尤其是这个/synchrony组件非常关键,如果不加上这个完整的服务根本就起不来。

分享到