时隔两年的更新,终于来了。避免被喷,还是说下本人前端,对服务器只是有点兴趣,了解的很浅很浅,求大佬轻喷。这期讲讲用到的 web 服务器配置。
最近有需要对 web 服务器进行改造,具体的需求见下方。正好顺便了解下目前两大主流 web 服务器的一些配置。
需求:根据数据表的记录,判断链接是否过期,如果已过期则显示过期页面,如果未过期直接显示页面内容。
解决方案:基于 nodejs,搭建一个简易的 http 服务器(基于 http 库)。
由于之前一直使用宝塔面板对服务器进行管理(又听说配置很多又记不住),所以一直不太了解 web 服务器配置。最近在迁移服务器的时候又遇到了一些问题,正好趁这个机会了解了一些配置项目。
SSL:以宝塔生成的配置文件为例,关于证书还有一些话想说,正好作为下一篇帖子的内容(挖坑)。
listen 443 ssl http2;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate 证书路径;
ssl_certificate_key 私钥路径;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
其中 ssl_protocols 之后的配置可能要根据证书填写,之前也在腾讯云申请过免费的证书,腾讯云提供的部署指南中关于协议加密套件和宝塔有写不同,应该是根据证书填写,但是我这么填进去也能用,具体之后再仔细研究。
反向代理:以宝塔生成的配置文件为例
不知道各位有没有这样的情况:写的接口跑在非 80 端口上,直接用 ip + 端口号访问一来是比较 low,二来配置 https 会有些麻烦,还需要导入证书进行配置才行。比如写了一个接口是 192.168.124.1:6666/ 这样访问的,用上反向代理之后,可以使用目录代理的方式,用 192.168.124.1/api/ 进行访问。只需要加上几条配置文件就可以。
#PROXY-START/music
location ^~ /music/
{
proxy_pass http://127.0.0.1:3000/;
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_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
if ( $uri ~* ".(gif|png|jpg|css|js|woff|woff2)$" )
{
}
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 1m;
}
#PROXY-END/music
上面这一段配置文件就是将本机 3000 端口的服务使用 /music 目录反向代理(有 Cache 字眼的是缓存相关的配置,可以不配)。不仅具有以上的好处,而且还不需要开放外网端口(又安全又省事),这样访问也更加优雅。
上面这段配置文件是代理 HTTP 协议的,WS 协议也是可以代理的。
#PROXY-START/ws/
location ^~ /ws/
{
proxy_pass https://127.0.0.1:23333/;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_connect_timeout 3s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_filePwNR71yt 0;
if ( $uri ~* ".(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filePwNR71yt 1;
expires 12h;
}
if ( $static_filePwNR71yt = 0 )
{
add_header Cache-Control no-cache;
}
}
#PROXY-END/ws/
这段配置文件长一点,但其实只是多出了两句协议升级的配置(加粗的内容,带有 Upgrade 字眼),ws 协议其实是 HTTP 升级而来的。这是将 23333 端口代理到 /ws 目录下,这样访问就很方便了。
但是 ws 协议使用反向代理目前也遇到了超时断开的问题,这里将超时时间设置到了一小时先这样试用一下。解决这个超时问题的办法目前看到的就是定时发送心跳包(在超时时间内),这样就可以保持连接。之后再找找其他办法,或者加入心跳的机制。
一些有帮助的帖子
- https://blog.csdn.net/wd520521/article/details/124681857
- https://blog.csdn.net/tsqjxy/article/details/125673308
- https://www.pianshen.com/article/17741008773/