标签 nginx 下的文章

两台机用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端口。

参考:

nextcloud 上传10GB文件后,提示组块时出错 502 - nginx 超时限制设置

现象: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

nextcloud-big-file-502-1.png

查看 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

nextcloud-big-file-502-2.png

估计是 php-fpm 的进程在约100秒后超时,被强制退出,然后重新创建进程了。

解决:在“宝塔”面板的php7.2管理配置窗口中,将“超时限制”(request_terminate_timeout)的时间上调,如从默认100秒的,上调到17200。

nextcloud-big-file-502-4.png

参考:

nginx的ssl客户端认证 - ssl_verify_client

环境:宝塔环境中的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;

nginx-ssl-client-1.png

9.没有证书的用户访问,会提示400错误
nginx-ssl-client-2.png

10.在用户的浏览器,如火狐浏览器里导入pfx证书
nginx-ssl-client-3.png

11.访问站点时,会提示选择证书,确定选择后,正常访问
nginx-ssl-client-4.png

参考:

在debian 9中为php7.0-fpm启用状态查询

如有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;
        }

debian-php-fpm-status-1.png

6.systemctl restart nginx # 重启nginx服务

7.在浏览器里访问状态查询页,如 http://szt.anqun.org/status?full ,可以看到相应数据
debian-php-fpm-status-2.png

参考:

在nginx为站点带参数的网址重定向到不同的新页面

问题:将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;
}

参考: