基于CentOS使用Nginx开启https反向代理


#1

一、介绍

以前只是用客户端或者网页进行同步,并未有任何关于HTTPS的需求,但是最近开始利用Joplin和WebDAV上传个人笔记。于是对https有了需求,看官方文档并未介绍基于centos系统的配置方法。
经过简单的研究,已经成功实现了通过Nginx开启HTTPS服务,代理WebDAV与seafile服务,上传下载均能正常使用。因此将一点点经验与大家分享一下。

二、步骤

跳过seafile的安装部署步骤。从nginx开始介绍。

1、安装基础环境
#yum install gcc-c++
#yum install -y pcre pcre-devel
#yum install -y zlib zlib-devel
#yum install -y openssl openssl-devel

2、下载Nginx
访问: https://nginx.org/en/download.html 找到链接
本例是使用了1.16版本。使用wget命令下载。
#wget -c https://nginx.org/download/nginx-1.16.1.tar.gz
解压
#tar -zxvf nginx-1.16.1.tar.gz
进入目录
#cd nginx-1.16.1

3、安装Nginx
由于需要开启HTTPS服务,不能使用默认配置,否则改完配置文件会报错。执行下面的命令
#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#make
#make install
安装完成后,使用命令查看一下配置文件路径
#/usr/local/nginx/sbin/nginx -t
一般会返回:
#nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

4、生成证书。
参考官方手册的命令,生成公钥和私钥。鉴于配置文件中的证书位置,最好是进入/etc/ssl/目录执行下列命令。
cd /etc/ssl
openssl genrsa -out privkey.pem 2048
1095天可以设置久一些。会提示输入一些信息,随意输入即可。
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

5、修改配置,默认配置中注释均已删除。排版问题请见谅。

#配置文件开始
worker_processes 1;#默认配置
events {
worker_connections 1024;#默认配置
}

http {
include mime.types;#默认配置
default_type application/octet-stream;#默认配置
sendfileon;#默认配置
keepalive_timeout 0;#默认配置
gzip on;#开启压缩功能

server {#第一个server配置
listen 443 ssl;#监听端口开启SSL
server_name test.ddns.com:11443;
#个人申请的DDNS域名。由于电信屏蔽了80/443/8000之类的端口。需要在路由器做映射11443。
if ($host != ‘test.ddns.com’){
return 403;
}
#如果被人扫描到,通过“IP:端口”方式访问将返回403。只能通过域名方式访问,稍微增加了一点安全性。
ssl_certificate /etc/ssl/cacert.pem; #官方配置文档的条目,照做即可。
ssl_certificate_key /etc/ssl/privkey.pem;#官方配置文档的条目,照做即可。
ssl_session_cache shared:SSL:1m;#官方配置文档的条目,照做即可。
ssl_session_timeout 5m;#官方配置文档的条目,照做即可。
ssl_ciphers HIGH:!aNULL:!MD5;#官方配置文档的条目,照做即可。
ssl_prefer_server_ciphers on;#官方配置文档的条目,照做即可。

location / {
proxy_pass http://127.0.0.1:8080;#由于开启了WEBDAV。反向代理到WEBDAV端口。
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

server {
listen 444 ssl;#监听端口开启SSL,SEAFILE网页服务
server_name test.ddns.com:11444;
if ($host != ‘test.ddns.com’){
return 403;
}

ssl_certificate /etc/ssl/cacert.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:8000;#反向代理到SEAFILE端口。
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /seafhttp {#重定向到SEAHUB。

rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_request_buffering off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;

}

location /media {#这条不知道干嘛用的。估计是nginx读取背景头像。

root /home/seafile/seafile-server-latest/seahub;#注意引用的路径要与实际情况一致。

}
}

}

#配置文件结束

6、更改服务配置
登录到网页,右上角菜单:系统管理-设置
SERVICE_URL:
https://test.ddns.com:11444
FILE_SERVER_ROOT
https://test.ddns.com:11444/seafhttp

7、端口映射
由于已经通过Nginx反向代理访问SeaFile的三个端口 8000 8080 8082。根据本文的例子。只需要映射443 444两个端口即可:

公网IP:11443---------------内网Seafile服务器IP:443
公网IP:11444---------------内网Seafile服务器IP:444

三、总结
由于本人对Nginx完全不了解。只能通过百度爬一些配置说明文档和官方文档慢慢琢磨。肯定有一些疏漏之处。如有问题欢迎大家交流。谢谢。


#2

忘记说明了。Nginx配置文件以1.16为例,在:/usr/local/nginx/conf/nginx.conf

改完配置。需要将nginx重启 /usr/local/nginx/sbin/nginx -s reload

如果需要开机自启。将/etc/rc.local 开启可执行权限 chmod +x /etc/rc.local 然后将路径写入rc.local即可。