Nginx 502 upstream sent too big header while reading response header from upstream

  线上部署的一个项目,通过OAuth登录完成之后,跳转回来就会出现502错误,错误必现。必现错误不用慌,从log里面仔细排查这个时间段的每一条记录,access log里面一般不会记录具体原因,只会记录502请求状态,想要查看具体原因还得看error log,如果log配置没搞好的话,建议先配置好log,然后再触发一次错误,这样就可以分析错误了。

nginx错误日志error_log日志级别

解决方法:在配置文件中加入这两个配置

location ~ .php$ {
    fastcgi_buffer_size 128k;
    fastcgi_buffers 32 32k;
}

重新加载Nginx,继续测试,正常没有报错!

Mysql错误 Index column size too large. The maximum column size is 767 bytes

  起因:准备上线一个phphub5的项目,本地是mysql5.7,数据库是没有问题的,线上环境5.5,版本较低,导入的时候出错,现在记录一下解决过程。

[Err] 1709 - Index column size too large. The maximum column size is 767 bytes.

错误原因是因为索引的字段太长,在 stack overflow 上找到了答案。查看原地址

原来SQL:

ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

修改之后SQL:

ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

解决方法:在 CREATE TABLE 语句后面加上 ROW_FORMAT=DYNAMIC 就可以了。

Mysql开启general_log记录

        开启general log会将所有的SQL语句记录下来。生产环境一般不会开启,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。 


* 如果是 mysql5.4以下版本

在my.ini 文件中 设置 log='你的log 日志路径'

在[mysqld]后面增加一行  然后重启mysql 生效

log=D:/wamp/www/mysql_bz.log

* 如果是 mysql5.5以上版本  一次性修改方法 重启后无效

SHOW VARIABLES LIKE '%general_log%'
SET GLOBAL general_log = 1
SET GLOBAL general_log_file = '你的log 日志路径'

长期有效修改方法在 my.ini 里面 [mysqld] 后面加上如下代码 没有 [mysqld] 自己加上

[mysqld]
general_log=ON
general_log_file=D:/wamp/logs/mysql_general.log  // 这里设置你 log日志路径

# log-raw=true  如果错误日志没记录 则开启这行,

参考地址:

http://dev.mysql.com/doc/refman/5.7/en/query-log.html

http://dev.mysql.com/doc/refman/5.7/en/password-logging.html

然后重启mysql 生效

错误的sql不会被成功解析,所以不会记录到general log中

如果需要记录所有的语句,包括那些错误的,请加 log-raw选项  log-raw=true


wamp 3.0.6(apache 2.4.23) 配置多站点

     之前开发机器上一直用着wamp2.2,php5.4.3也有点落后了,composer更新很多类都提示要升级php版本了,于是就下载了wampserver3.0.6,软件包200多M。apache2.4.23_mysql5.7.14_php5.6.25-7.0.10。安装之后php5.6,php7.0随意切换。有些项目是mysql的,还是乖乖用5.6吧,毕竟php7没有mysql驱动,可以用mysqli,pdo_mysql。推荐用PDO来操作数据库。

    注意:vc++ 2015要安装,没有的话apache跑不了。

    装完wamp3就要配置多站点了,apache2.4是要将其中的 Require local 修改成 Require all granted

blob.png

    因为我之前的是wamp2.2,很多项目还在之前的旧的目录,所以在apache2.4下授权旧的目录,这样就可以把原来的配置文件复制过来用了,目录授权之后DocumentRoot配置的路径也不用动。在httpd.conf里面属于全局配置,也可以在httpd-vhosts.conf里面单独配置。

blob.png

    最后重启apache。

Freebsd安装redis

************************** Ports安装 **************************

whereis redis   查找redis路径

安装 cd /usr/ports/databases/redis   make  make install

启动  /usr/local/bin/redis-server /usr/local/etc/redis.conf

关闭  /usr/local/bin/redis-cli shutdown

命令行客户端  /usr/local/bin/redis-cli

************************** 源码安装 **************************

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz

$ tar xzf redis-3.2.8.tar.gz

$ cd redis-3.2.8

$ make

如果出现报错:

blob.png

我们只要使用gmake代替make就可以解决了

cd /usr/local/redis

启动  ./bin/redis-server ./redis.conf

进入命令行客户端  ./bin/redis-cli

127.0.0.1:6379> info   查看redis信息

blob.png

********************** PHP PECL安装 **********************

cd /usr/ports/databases/php5-redis

make install

php -m  查看安装的模块

service php-fpm reload   phpinfo里面就能看见redis了。

blob.png