docker 部署nginx、php-fpm错误记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 部署nginx、php-fpm错误记录相关的知识,希望对你有一定的参考价值。
参考技术A 最近要使用docker部署nginx和php-fpm服务,因为以前部署过无数次的nginx+php-fpm,本以为轻车熟路,很快搞定,但是在这个最熟的环节却出了问题,耗费了小半天的时间,特把解决问题的过程记录如下:(使用docker 部署 nginx,php-fpm的具体步骤网上较多,不再此进行详述了)问题:docker 部署完成 nginx,php-fpm后,运行服务,出现:recv() failed (104: Connection reset by peer) while reading response header from upstream
多次修改修改无果后,开始自己查找此错误:
证明php-fpm服务已经启动了,但是未知原因php-fpm把链接中断了。怀疑是底层tcp链接问题,使用netstat -s | grep reject,未发现异常链接。想不出啥原因,查看php-fpm error.log未发现有用信息
nginx+php-fpm独立节点的部署wordpress笔记
以前都是用lnmp一键安装的lnmp环境。
今天同学说他分开部署nginx+php-fpm出现了问题,总是报502,正好我也没试验过,于是自己也做了一遍,也遇到些问题,记下来以备以后用到。
node1: 192.168.2.11 nginx+mysql
node2: 192.168.2.12 php-fpm
其中node1和node2前期都安装了lnmp一键安装包。
因此,安装过程就不描述了。
直接开始修改参数,操作如下。
node1上的MySQL的配置:
安装过程略过,说下授权的配置
>create database wp; >grant all on wp.* to ‘wp‘@‘192.168.2.%‘ identified by ‘123456‘; >flush privileges;
node1上的nginx的配置文件如下:
server { listen 80 default_server; server_name 192.168.2.11; index index.html index.htm index.php; root /home/wwwroot/default; #error_page 404 /404.html; location ~\.php$ { root /home/wwwroot/default; fastcgi_pass 192.168.2.12:9000; fastcgi_index index.php; includefastcgi.conf; 注意这里我没有用fastcgi_params,因为fastcgi_params里面缺少一行文件 } location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\. { deny all; } access_log /home/wwwlogs/access.log access; }
另外,fastcgi.conf内容如下:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 注意这行,fastcgi_param比fastcgi.conf就是缺少了这行 fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; #PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
node2上的php-fpm的配置文件如下:
[global] pid= /usr/local/php/var/run/php-fpm.pid error_log= /usr/local/php/var/log/php-fpm.log log_level= notice [www] listen = 192.168.2.12:9000 listen.backlog= -1 listen.allowed_clients = 192.168.2.11 如果注释掉这行就是表示允许全部IP连接到php-fpm listen.owner= www listen.group= www listen.mode= 0666 user= www group= www pm= dynamic pm.max_children= 10 pm.start_servers= 2 pm.min_spare_servers= 1 pm.max_spare_servers= 6 pm.max_requests = 1000 这个参数设置太小的话,可能会引起间歇性502错误 request_terminate_timeout= 100 request_slowlog_timeout= 0 slowlog= var/log/slow.log
朋友网站报502,就是因为上面的listen.allowed_clients参数被他设置成了any(被网上一个坑爹的教程害的)
此外,还要在node1和node2上部署上相同的网站源文件。
在node2上通过scp将node1上的wordpress网站文件拷贝过来
# scp [email protected]:/home/wwwroot/default /home/wwwroot/default # chown www.www /home/wwwroot/default
要注意的是:node1的运行nginx的用户id在node2上也要存在,并且id还要相同,否则可能访问时候报错。
在node1启动nginx,在node2上启动php-fpm。
在浏览器访问http://192.168.2.11即可进入wordpress的安装界面。输入数据库的相关信息即可
这里没有考虑文件(及图片)的存储,实际生产环境中,应该使用共享存储NFS或者分布式存储。
以上是关于docker 部署nginx、php-fpm错误记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 nginx、PHP-FPM 和 docker 处理 PHP 文件时出现 403 错误
Nginx-proxy docker 接收来自 php-fpm docker 的 stderr 输出(导致 502 错误)