两台机用nginx来做web负载平衡
需求:当前一台机,运行nginx,放置有web站点,想增加多一台机来做负载,分担web访问压力。
尝试:可在A机里新建负载站点site-load,监听80端口,且将访问负载到A机和B机内网IP的8083端口;将A机原站点site-A的监听端口更改到8083,同时将绑定的域名domain移到site-load站里;B机新站点site-B复制site-A的内容,且监听8083端口。
参考:
需求:当前一台机,运行nginx,放置有web站点,想增加多一台机来做负载,分担web访问压力。
尝试:可在A机里新建负载站点site-load,监听80端口,且将访问负载到A机和B机内网IP的8083端口;将A机原站点site-A的监听端口更改到8083,同时将绑定的域名domain移到site-load站里;B机新站点site-B复制site-A的内容,且监听8083端口。
参考:
现象:nextcloud 需要上传超过10GB的文件,但上传完成后“组块时出错 502”。nginx 的web错误信息里有如:
recv() failed (104: Connection reset by peer) while reading response header from upstream request: "MOVE /remote.php/dav/uploads/name/web-file-upload-nnnn/.file" HTTP/1.1, upstream: fastcgi://unix:/tmp/php-cgi-72.sock
查看 php-fpm.log 的日志,如:
WARNING: [pool www] child nnnn, script '/www/wwwroot/nextcloud/remote.php'(request: "MOVE /remote.php") execution timed out (104.723765 sec). Terminating.
WARNING: [pool www] child nnnn exited on signal 15 (SIGTERM) after 13101.403079 seconds from start
估计是 php-fpm 的进程在约100秒后超时,被强制退出,然后重新创建进程了。
解决:在“宝塔”面板的php7.2管理配置窗口中,将“超时限制”(request_terminate_timeout)的时间上调,如从默认100秒的,上调到17200。
参考:
环境:宝塔环境中的nginx 1.16
过程:
1.先为站点szt.anqun.org设置好https访问
2.openssl genrsa -des3 -out ca.key 4096 # 创建好自己的 Certificate Authority,会要求输入一个密码
3.openssl req -new -x509 -days 365 -key ca.key -out ca.crt # 创建好CA Certificate
4.openssl genrsa -des3 -out user.key 4096 # 创建用户user的密匙
5.openssl req -new -key user.key -out user.csr # 创建用户user的CSR
6.openssl x509 -req -days 365 -in user.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out user.crt # 签发用户的证书
7.openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt -certfile ca.crt # 生成pfx证书,方便用户导入到浏览器里。会提示设置一个导入密码
8.在nginx的站点配置文件里,在适合的位置添加两行:
# client certificate
ssl_client_certificate /www/server/nginx/ca.crt;
ssl_verify_client optional;
9.没有证书的用户访问,会提示400错误
10.在用户的浏览器,如火狐浏览器里导入pfx证书
11.访问站点时,会提示选择证书,确定选择后,正常访问
参考:
如有php站点响应慢,出现504等错误,可以尝试启用php-fpm的状态显示和慢查询功能来辅助诊断。
环境:debian9,php7.0-fpm, nginx
过程:
1.nano /etc/php/7.0/fpm/pool.d/www.conf # 编辑默认的php-fpm www配置文件
2.pm.status_path = /status # 移除注释,启用状态查询页
3.添加以下两行,启用慢查询记录:
slowlog = /var/log/nginx/$pool.log.slow
request_slowlog_timeout = 10
4.systemctl restart php7.0-fpm # 重启php-fpm进程
5.nano /etc/nginx/sites-enabled/default # 编辑nginx的默认站点配置,在适合位置添加:
location /status {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
log_not_found off;
}
6.systemctl restart nginx # 重启nginx服务
7.在浏览器里访问状态查询页,如 http://szt.anqun.org/status?full ,可以看到相应数据
参考:
问题:将php的站点静态化后,搜索引擎中的一些页面想跳转到新的静态页如,如 post.php?id=5 重定向到 post35ta.html,post.php?id=7 重定向到 postd26t.html。
处理:可在nginx的站点配置文件中,设置按条件301跳转,如:
location = /post.php {
if ($arg_id = 5) {
return 301 http://liujia.anqun.org/post35ta.html;
}
if ($arg_id = 7) {
return 301 http://liujia.anqun.org/postd26t.html;
}
try_files $uri /index.html;
}
参考: