标签 nginx 下的文章

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

参考:

用nginx的proxy_pass代理一个站点且保持访客原IP登录

感谢Radi提供nginx配置内容。

portal.drserver.net 晚上从国内直接访问慢,甚至打不开。如用户使用国外代理提交订单,又会被订单系统认为用户资料地区和提交订单的IP不符而取消。

过程:

1.找一个转发的机子,如阿里云香港地域的ECS实例,配置好nginx 1.10+

2.创建站点配置文件,本例是 /etc/nginx/sites-enabled/portal.drserver.cn,内容如下:

server {
        listen       443 http2; 
        server_name  portal.drserver.cn;

  ssl_certificate           /etc/nginx/ssl/portal.drserver.cn.pem;
  ssl_certificate_key       /etc/nginx/ssl/portal.drserver.cn.key;

  ssl on;
  ssl_session_cache  builtin:1000  shared:SSL:10m;
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
  ssl_prefer_server_ciphers on;

        location / {
                resolver 8.8.8.8 ipv6=off;
                proxy_pass https://portal.drserver.net$1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Proto https;
                proxy_redirect off;
                proxy_set_header Referer $http_referer;
        }
}

3.创建好相应的ssl文件,nginx -t 测试配置内容

4.nginx -s reload # 重载nginx配置

5.访问 https://portal.drserver.cn ,显示的内容也是 https://portal.drserver.net 的内容