本文探讨了如何为同一个 VPS 上使用不同端口的 web 应用配置 https。
我在自己的一台 VPS 上部署了多个 web 应用,包括 commafeed,leanote,h5ai,还有 webdav 应用等等。这些应用监听的端口不同,可以通过域名+端口的形式访问。但是这样的访问形式显然不够简洁。另外在全民https的现在,还通过这样的形式访问网站太落伍了。因此,我在网上做了一些搜索,主要参考下列文章:
经过对自己 nginx 配置文件的一番魔改,目前实现的情形如下:
未解决的问题是
至此,需要在 cloudflare 上配置的地方就结束了。
pacman -S openssl
mkdir -p <DIR>/cert //建立制作存放证书的目录
cd <DIR>/cert
# 签发一个根域名的 CA 证书
openssl genrsa -des3 -out ca.key 2048 //创建一个私钥 ca.key
openssl req -new -x509 -days 7305 -key ca.key -out ca.crt //生成 CA 根证书(公钥)
# 其中 days 后面的参数是有效期。执行后会让你填相关信息,common name 填根域名,即 yourdomain.com
openssl genrsa -des3 -out yourdomain.com.pem 1024 //生成一个给泛域名用的私钥
openssl rsa -in yourdomain.com.pem -out yourdomain.com.key //解密私钥
openssl req -new -key yourdomain.com.pem -out yourdomain.com.csr //生成签名请求
# 这一步中的 common name 填入泛域名,即*.yourdomain.com ,这样生成的证书可以供所有子域名使用
vi /etc/openssl.cnf
# 这里修改 dir = 的值为./ca
mkdir -p ca/newcerts
touch ca/index.txt
touch ca/serial
echo "01" > ca/serial
openssl ca -policy policy_anything -days 7305 -cert ca.crt -keyfile ca.key -in yourdomain.com.csr -out yourdomain.com.crt //执行签名
cat ca.crt >> yourdomain.com.crt //把 ca.crt 中的内容粘贴到 yourdomain.com.crt 的最后,证书签发完成
pacman -S nginx-mainline
# 前面的配置参考了 cloudflare 和 Mozilla 推荐的配置
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ecdh_curve X25519:P-256:P-384:P-224:P-521;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECD$
ssl_prefer_server_ciphers on;
ssl_certificate <DIR>/cert/yourdomain.crt;
ssl_certificate_key <DIR>/cert/yourdomain.key;
server {
listen 443 ssl http2;
server_name note.yourdomain;
location / {
proxy_pass http://127.0.0.1:port1/; //通过 https://note.yourdomain 访问我的 leanote
}
}
server {
listen 443 ssl http2;
server_name rss.yourdomain ;
location / {
proxy_pass http://127.0.0.1:port2/; //通过 https://rss.yourdomain 访问我的 commafeed
}
}
server {
listen 443 ssl http2;
server_name file.yourdomain;
location / {
proxy_pass http://127.0.0.1:port3/; //通过 https://file.yourdomain 访问我的 h5ai
}
location /webdav {
proxy_pass http://127.0.0.1:port4/; //通过 https://file.yourdomain/webdav 访问我的 webdav
}
location /zotero {
proxy_pass http://127.0.0.1:port5/; //通过 https://file.yourdomain/zotero 访问我的另一个 webdav
}
}
}
本文地址 https://blog.liuwm.work/2017/11/05/VPS 上多个 web-server 配置 ssl/
1
xfspace 2017-11-05 15:52:48 +08:00 via Android
啥意思?
V2EX 不支持全文转载吧。 |
2
Marfal 2017-11-05 16:15:35 +08:00 via Android
这也能叫魔改。
|
4
kmahyyg 2017-11-05 17:41:39 +08:00 via Android
没意思,直接 le + crontab 搞定
|
5
boboliu 2017-11-05 17:49:29 +08:00 via Android
1. 既然都有 cf 了上啥 full,flexible 岂不美哉。。。
2. service 监听本地或者防火墙禁止外部访问端口就能解决问题了。 结论:楼主还需要学习一个 |
6
shiji 2017-11-05 17:51:38 +08:00 via Android
我不知道说点啥。
|
7
msg7086 2017-11-05 18:17:25 +08:00 via Android
下意识看了发帖时间,看完以后不知道说点啥。
|
8
edsheeran 2017-11-06 12:16:16 +08:00 via iPhone
都 cf 了,server 還配個毛
|