553 Requested action not taken: no smtp MX only

阿里云出现这个问题,发现是php-fpm.conf的设置问题,其中php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f noreply@domain.com中的noreply@domain.com不应与现有发信人,以及wordpress后台发信人重复,并且使用自己的域名邮箱。

wp_posts转换为innodb,ERROR 1214 (HY000): The used table type doesn’t support FULLTEXT indexes

刚才给个朋友转换wordpress数据库到innodb时,遇到错误提示ERROR 1214 (HY000): The used table type doesn’t support FULLTEXT indexes,但是我发现只有wp_posts这个表有问题,谷歌了一番终于找到答案。FULLTEXT indexes只有MyISAM引擎才支持,而innodb不支持,但是数据表大了还是有必要用innodb,转换时候我发现这个表需要用到FULLTEXT indexes功能,思路是这样,我们可以保留MyISAM引擎,不对此表修改,也可以删除需要FULLTEXT indexes功能的键值。我采取的是后者

此时显示该表中键值的特性,返回如下

于是我们可以清楚的看到,只有wp_greet_box_post_related使用了全文索引即FULLTEXT indexes,所以我们把这个drop掉

删除掉这一列就行了

Nginx的wordpress配置文件分享

前发了一篇nginx的tips,包含了一些常用的Pitfalls(陷阱),也参考了之前在wordpress官网看到的nginx配置,所以发一下自己的东西,自己有所添加,但其实感觉官网的已经差不多了。

[code]# WordPress single blog rules.
# 请把本配置文件复制到wordpress.conf,并在nginx.conf中包含(include wordpress.conf)

# 这个看起来似乎会有一些怪异 – 本文是为了尽最大可能符合nginx官网提供的说明,并避免if陷阱
# http://wiki.nginx.org/HttpCoreModule
# 为 */wp-admin 请求添加斜线,也就是避免后台出现404
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

location / {
try_files $uri $uri/ /index.php?$args;
}
#为以下文件头部添加过期时间,以增强本地缓存,expires后面接时间,max即最大值,看需求;
#关闭log
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
#对于js和css,我们利用正则匹配,设置过期时间为30d,最少为7d,这是谷歌的pagespeed给出的建议
location ~ .*+\.(js|css)?$
{
expires 30d;
}

#你可以注释掉下面的,来包含wp-super-cache/w3 total cache的配置
#你可以在后台看到他们的nginx配置文件
#include global/wordpress-wp-super-cache.conf;
#include global/wordpress-w3-total-cache.conf;

# 将php文件发送到后端的php-fpm/php-fcgi
location ~ \.php$ {
try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;
#注意:你需要设置 "cgi.fix_pathinfo = 0;" 在 php.ini

include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_intercept_errors on; #关闭fastcgi的错误提示
fastcgi_pass unix:/tmp/php-cgi.sock;

}[/code]

所以我的nginx.conf中虚拟主机配置为:

[code]
server
{
listen 80;
server_name catinmay.com;
index index.php;
root /var/www/catinmay.com;
include wordpress.conf;
}
server {
listen 80;
server_name www.catinmay.com;
return 301 https://catinmay.com$request_uri;
}[/code]

对于lnmp一键安装包,其wordpress.conf的问题就在于过度使用If,对于lnmp用户,我的建议是把wordpress.conf直接改成
[code]location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;[/code]

终于把varnish给安装上了

之前看天域剑客说varnish压缩headers效果不错,就一直想安装一个,由于安装的时候需要改的配置文件比较多,之前一直没搞好,而且一直没找到原因。这次是彻底的搞定了。

问题主要是nginx的配置文件,由于我对www域名的301重定向放到了单独的server{}段里面,所以需要每个server{}中加入listen 8080;才可以。我用的varnish的配置文件是nicolargo在github上面托管的,详细地址如下:https://github.com/nicolargo/varnish-nginx-wordpress ,包含了nginx和php-fpm的配置文件,也可以参考下。

另外就是,全部启用之后,wordpress后台评论者ip显示为127.0.0.1,按照网上的方法修改wp-includes文件夹下面的comment.php。

修改$commentdata[‘comment_author_IP’] = preg_replace(‘/[^0-9a-fA-F:., ]/’, ”,$_SERVER[‘REMOTE_ADDR’] );
为$commentdata[‘comment_author_IP’] = preg_replace(‘/[^0-9a-fA-F:., ]/’,”,$_SERVER[‘HTTP_X_FORWARDED_FOR’] );

还有一种方法是让varnish把用户真实ip传给nginx,目测可行,但是没有自己测试过。

nginx的一些tips,以前没看,真是OUT了

nginx 今天在nginx的官方wiki上面又看到一些关于重写规则设置的问题,拿来分享一下。首先要说就是这个301重定向(其实是重写的问题)。

Server Name的使用:
BAD:

[code]
server {
server_name domain.com *.domain.com;
if ($host ~* ^www\.(.+)) {
set $raw_domain $1;
rewrite ^/(.*)$ $raw_domain/$1 permanent;
[…]
}
}[/code]

这个里面有三个问题,首先就是if,你可以阅读一下《if is evil》当nginx接收到不论是二级域名或者是www.domain.com甚至是domain.com,if总是被判定。由于每次请求都要查询host headers,所以非常的没有效率,我们应该尽量避免。我们用以下的例子来代替:
GOOD:

[code]server {
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
server {
server_name domain.com;
[…]
}[/code]

使得代码更易读,这样也减少了nginx请求次数。我们尽量避免带有欺骗性的if。

检查文件是否存在
使用if语句来检查文件是否存在时很可怕的事情,也就是说,如果你用较新版本的nginx,你应该尝试使用try_files使得问题变得更加简单

BAD:

[code]server {
root /var/www/domain.com;
location / {
if (!-f $request_filename) {
break;
}
}
}[/code]

GOOD:

[code]server {
root /var/www/domain.com;
location / {
try_files $uri $uri/ /index.html;
}
}[/code]

我们仅仅是查看$uri是否存在将if请求取代。使用try_files意味着你可以测试一个队列。如果$uri不存在,尝试$uri/,否则退回location。

这个示例中,服务器将查看$uri文件是否存在,存在则读取,不存在则查看文件夹里面是否存在,如果都不存在,则使用index.html。这个也是可以淘汰if语句的一个示例吧。

麻烦的重写
这个很容易感到困惑,但是没有关系,我们需要把表达式写得简洁,所以不要生厌。

[code]BAD:
rewrite ^/(.*)$ http://domain.com/$1 permanent;
GOOD:
rewrite ^ http://domain.com$request_uri? permanent;
BETTER:
return 301 http://domain.com$request_uri;[/code]

关于$uri和$request_uri区别,可以参考 http://wiki.nginx.org/HttpCoreModule $request_uri是从浏览器获取的请求包含参数,不可修改,$uri正相反。

综上的一些小tips,又去wordpress官网参考了一下wordpress的重写规则,请点击这里

参考自:http://wiki.nginx.org/Pitfalls