出现502 bad gateway错误的原因

1.php-fpm进程数不够用
2.Linux内核打开文件数量小
3.脚本执行时间超时
4.缓存设置比较小

网站间歇性出现502,第一反应不是程序的问题,而是nginx服务器的问题,因为这是代理服务器出现的问题,代理服务器并没有安装php 排除第一中情况。

于此想到的是可能是超时,所以我把超时修改了一些
一下是服务器原配置(重点配置)

http部分

server_names_hash_bucket_size 64;
client_header_buffer_size 128k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;

keepalive_timeout 60;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;

gzip_buffers 4 128k;

server部分

upstream myweb {
server 10.10.10.1:80 max_fails=3 fail_timeout=30s;
server 10.10.10.2:80 max_fails=3 fail_timeout=30s;
ip_hash;
}

location / {
proxy_pass http://myweb;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
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 X-Forwarded-Proto https;
proxy_redirect off;
}

Read More →

如果nginx当掉了,我们想用shell自动拉起,可以用定时任务和ps监控实现

新建hup.sh

#!/bin/sh
ps -fe | grep “nginx” |grep -v grep

if [ $? -ne 0 ]
then
echo “starting…..”
/etc/init.d/nginx restart
else
echo “runing…..”
fi

然后在crontab中创建

*/1 * * * * /yourpath/hup.sh

保持后重启crond

两台服务器之间拷贝文件
采用linux命令scp可以在两台电脑之间复制文件,如有两台服务器192.168.1.100/101,现在需要拷贝100 /etc/passwd文件到101服务器的/etc目录下,登陆100服务器,知道101的用户root的密码为123456

scp /etc/passwd root@192.168.1.101:/etc/
第一次会提示授权操作,输入yes后再输入root用户的密码,拷贝完成。
服务器之间免密码登陆
现在每次拷贝文件的时候都需要输入密码非常麻烦,现在介绍一种采用公钥/私钥认证的方式去掉密码登陆
在100服务器上进入.ssh目录,

cd ~/.ssh
ssh-keygen -t rsa
scp id_rsa.pub root@192.168.1.101:~/.ssh
进入101服务器,将公钥导入到~/.ssh/authorized_keys,

cd ~/.ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
~/.ssh权限设置为700
~/.ssh/authorized_keys的权限设置为600
这是Linux的安全要求,如果权限不对,自动登录将不会生效
完毕之后,退出服务器的登录,再使用ssh登录,你就会发现服务器不会再向你询问密码了.

nopaass

1、 php.ini(/your/php.ini)的配置中这两项
cgi.fix_pathinfo=1
doc_root=
2、nginx配置文件/etc/nginx/sites-available/default中注意以下部分
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /youpath$fastcgi_script_name;
include fastcgi_params;
}
路径需要根据你主机主目录的实际情况填写

配置完以上部分,重启一下service nginx restart,应该没问题了

centos7 安装双mysql

之前安装了mysql的5.6.19 现在继续安装此版本主要用于主从复制

1.安装cmake (网上自行下载mysql5.6.19)

wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -xzvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap
make && make install

安装一下工具

yum -y install wget gcc-c++ ncurses ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel libjpeg* libpng* freetype*

cd mysql-5.6.16

安装mysql

cmake \
-DCMAKE_INSTALL_PREFIX=/data/mysql3307 \
-DMYSQL_UNIX_ADDR=/data/mysql3307/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/data/mysql3307/data \
-DMYSQL_TCP_PORT=3307 \
-DENABLE_DOWNLOADS=1

初始化mysql

scripts/mysql_install_db –basedir=/usr/local/mysql3307/ –user=mysql

修改mysql的配置

vi /usr/local/mysql3307/etc/my.cnf

[client]
port = 3307 –数据库端口号
socket = /data/mysql3307/mysql.sock –sock文件路径
default-character-set=utf8 –客户端UTF8连接
[mysqld]
port = 3307 –数据库端口号
socket = /data/mysql3307/mysql.sock –sock文件路径

安装mysql的系统服务

support-files/mysql.server /etc/init.d/mysql3307

vi /etc/init.d/mysql3307

basedir=/data/mysql3307
datadir=/data/mysql3307/data
mysqld_pid_file_path=/data/mysql3307/mysql11.pid

保存成功后试试

/etc/init.d/mysql3307 start

centos7本机安装双mysql教程