1、mysql、mysqld、phpMyAdmin各配置文件和运行机制不太清晰
在centos6上编译安装lamp,使用phpmyadmin连接数据库
提示错误,无法连接到/tmp/mysql.sock,但mysql客户端连接
正常;
修改/etc/my.cnf文件中socket文件位置为/tmp/mysql.sock后
连接正常;但mysql(yum安装)连接不上,提示无法连接
到/var/lib/mysql/mysql.sock;而编译安装目录下的bin/mysql
可以连接上
?phpmyadmin和mysql客户端连接服务器时指定的sock不同
导致的一个能上一个不能上吗?怎么修改他们
2、在centos6上编译安装lamp(php-fpm),订阅rss和评论rss
无法打开(有关feed的问题)
3、lamp(php-fpm模式)定义alias时,动态资源无法访问:
使用php-fpm模式时、当访问.php文件时,文件的查找过程:
1、设定访问URL为localhost/wordpres;站点目录为/usr/local/httpd/htdocs
2、web服务器端收到请求:
查询客户端对/usr/loca/httpd/htdocs/wordpress的访问权限;
查询访问目录下默认访问文件,类似*.html等静态资源则返回内容;
类似*.php等动态资源则通过fcgi接口传递给后端;
3、php后端服务器如何查找动态资源路径:
以ProxyPassMatch指令为例,设httpd配置文件中有如下片段:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/httpd/htdocs/$1
则此时php服务器查找的动态文件路径为:
/usr/local/httpd/htdocs/wordpress/$1
4、当设定别名:alias ‘/wp’ ‘/usr/local/httpd/htdocs/wordpress’时
依3中的ProxyPassMatch指令,php服务器查找的动态文件路径为:
/usr/local/httpd/htdocs/wp/$1
而当你的httpd的站点目录下仅有wordpress目录,而没有wp目录时,访问失败
此时:
1、创建wordpress目录的软链‘wp’;
2、在3中的指令之上添加ProxyPassMatch指令:
ProxyPassMatch ^/wp/(.*\.php)$ fcgi:127.0.0.1:9000/usr/local/httpd/htdo
cs/wordpress/$1
5、当设定别名:alias ‘/wordpress’ ‘/www/wordpress’ ;即假定wordpress站点
文件目录在httpd的站点目录/usr/local/httpd/htdocs之外时;
依3中的ProxyPassMatch指令,php服务器查找的动态文件路径为:
/usr/local/httpd/htdocs/wordpress/$1
此时访问失败,提示文件不存在:
1、创建wordpress站点文件目录的软链到/usr/local/httpd/htdocs目录下:
#ln -sv /www/wordpress /usr/local/httpd/htdocs/wordpress
2、修改添加ProxyPassMatch指令(匹配范围小的指令在上)
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/$1
总结:
当php-fpm模式时,alias指令会造成php服务器动态资源查找路径错误;
此时:
1、对别名对应的文件系统路径创建位于httpd站点目录下的以别名基名为
名称的软链,如
alias指令:
alias ‘/wordpress’ ‘/www/html/wordpress’
alias '/wp' '/www/html/wordpress'
ProxyPassMatch指令:ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:900
0/usr/local/httpd/htdocs/$1;映射到httpd默认站点目录
#ln -sv /www/html/wordpress /usr/local/httpd/htdocs/wordpress
#ln -sv /usr/local/httpd/htdocs/{wordpress,wp}
建议使用:软链易于操作,便于管理
Tip:
1、创建软链的方式,alias指令就毫无意义了:对别名的访问其实就是
直接对软链的访问;所有alias指令可删除;
2、由于软链是位于httpd的站点目录下,而站点目录的权限为Indexes
和允许所有访问,所有此目录下的所有站点文件默认为允许所有
访问;
3、要精确控制软链的访问权限,必须分别对每个软链定义RequireAll
控制指令;
2、修改ProxyPassMatch指令的路径映射,使映射后的路径为站点资源的
正确路径,如
alias指令:
alias ‘/wordpress’ ‘/www/html/wordpress’
alias '/wp' '/www/html/wordpress'
ProxyPassMatch指令:
ProxyPassMatch ^/wordpress/(.*\.php)$ fcgi://127.0.0.1:9000/www
/html/wordpress/$1
ProxyPassMatch ^/wp/(.*\.php)$ fcgi://127.0.0.1:9000/www/html/word
press/$1
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/httpd/htd
ocs/$1
不建议使用:会造成配置文件的复杂化,易出错且降低性能
4、基于上一步的软链代替别名配置,进行访问控制,同样的配置
wordpress访问控制生效,phpMyAdmin却效果相反(即ip192.1
68.181.11不可访问,其他可以):
wordpress配置:
<Directory /usr/local/httpd/htdocs/wordpress>
Options Indexes FollowSymLinks
AllowOverride none
<RequireAll>
Require ip 192.168.181.11
</RequireAll>
</Directory>
phpMyAdmin配置:
<Directory /usr/local/httpd/htdocs/wordpress>
Options Indexes FollowSymLinks
AllowOverride none
<RequireAll>
Require ip 192.168.181.11
</RequireAll>
</Directory>
其后,两者都尝试其他权限配置,都无法生效,重启或重载服务都不生效;
解:sb了,两台虚拟机都部署了lamp(一台是yum部署),结果修改编译
部署的配置却一直访问yum部署的服务器
问题还是存在!!:
同样的授权,phpMyAdmin可以,而wordpress无法生效,TMD
解:
wordpress授权配置文件中,wordpress站点路径中httpd写成了httdp
TMD,精神恍惚的时候做事情真的要命!!
5、centos7配置了lamp+fpm服务,在启用配置fcgi转发时,无法
列出目录内容,提示404,如下:
设置转发时:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
访问站点下centos目录,提示404,错误日志提示Primary script unknown
取消后端fcgi转发时:
站点下centos目录访问正常,列出其下文件列表;
析:
web服务器查找目录下index.html文件,查找index.php文件,都没有
分析应该遵循Indexes指令列出目录下文件才对,却提示主要脚本位置
错误,不解!
临时解决:
定义Directory指令,位置要提供服务的目录位置,包含以下指令:
DirectoryIndex index.html
6、mysql新建用户无法登陆
问题:
wordpress网站使用了‘user’@‘hostname’的mysql授权用户,现在mysql中
添加了skip-hostname-resovle = 1,所以删除用户‘user’@‘hostname',并添加新
用户‘user’@‘ip’,并授权该用户对wp数据库的所有权限,结果wordpress显示无
法连接数据库;
环境:
Centos 7
httpd2.46
php-mod (php5.4.16)
mariadb-server5.5.64
解决问题:
1、尝试使用mysql@127.0.0.1在本地客户端进行登录:
#mysql -uwp -h127.0.0.1 -p
#******
登录失败‘Access denied’
2、google后提示:删除mysql中两个空名称用户并重读授权表:
DELETE FROM mysql.user WHERE User=‘’;
FLUSH PRIVILEGES;
在本地使用mysql客户端登录成功,但打开wordpress主页仍提示‘连接
数据库失败’
3、检查wordpress配置文件:wp-config.php
之前配置文件中已更改了host为127.0.0.1
添加define (WP _ALLOW_REPAIR,ture);语句,重启httpd服务,访问
wp-admin页面,提示数据库连接方面的错误,如密码错误、用户未
授权、或服务未开启等等;
4、root用户本地登录mysql,重新设置密码并授权新建用户对wordpress数据库的
的全部权限:
SET PASSWORD FOR wp@127.0.0.1 = PASSWORD('8888');
GRANT ALL ON wordpress.* TO wp@127.0.0.1;
FLUSH PRIVILEGES;
5、刷新wordpress主页,访问成功;
总结:
1、数据库用户连接不上时,先本地连接排除网络问题确认是否数据库的问题
2、重设用户密码(有可能密码设置错误)
3、检查授权语句语法并重新授权用户(有可能语句中多了符号
造成错误的授权)
7、HTTPD访问控制指令RequireAll和RequireAny:
RequireAny:
在没有指定RequireAll,潜在的指定为RequireAny
没有指定任何Require指令时,默认为Require all denied拒绝所有;
在指定了任意Require指定时,仅允许指令允许的访问,其他拒绝
在指定了多条Require指令时,仅匹配一条生效
只有肯定需求用法,如:
Require ip:
Require ip 192.168.100.10。。。
Require ip 192.168.100 192.168.101 10
Require ip 192。。。
Require ip 192.168.100.0/24。。。
Require ip 192.168.100.0/255.255.255.0。。。
Require host:
Require host test.shxing.com mail.shxing.com。。。
Require host shxing.com。。
Require host .com。。
Require user:和AuthType、AuthName等指令一起使用
Require group:和AuthType、AuthName等指令一起使用
(user和group无法在RequireAny中实现和IP的双重访问控制)
RequireAll:
在内没有指定任何指令会提示语法错误;
在内存在Require指令时,默认为Require all denied拒绝所有,仅允许Require条目
不能仅有not require,因为默认为拒绝了,多重拒绝没有意义,会提示语法错误;
必须满足其内的所有条件才能允许访问;
Require (not)ip/host/user/group
user和group必须配合Auth选项同时使用
例1:
Require ip 192.168.100:允许192.168.100网段主机访问
例2:
Require not ip 192.168.100.1
Require ip 192.168.100:允许除192.168.100.1之外的其他192.168.100网段的主机访问;
例3:
Require 192.168.100
AuthType basic
AuthName “用户登录访问”
AuthBasicProvider file
AuthUserFile “/etc/httpd/conf.d/.htpasswd”
AuthGroupFile “/etc/httpd/conf.d/.htgroup”
Require user valid:允许192.168.100网段的主机进行用户登录访问
总结:
Requireany:任意一条Require指令满足即可;默认拒绝所有
不能使用Require not
Requireall:满足所有Require指令才可访问,默认拒绝所有
可以使用Require not,但不能仅有not指令;
Alias问题实例:
平台:lamp+wordpress+phpMyAdmin
版本:
linux:Centos 6.10
httpd:2.4.25,源码编译安装
mariadb-server:5.5.47,源码编译安装
php:5.6.23
问题:在httpd配置目录中添加wordpress.conf和phpMyAdmin.conf配置
文件;在站点目录分别创建wordpress-release和phpMyAdmin-release
的软链wordpress和phpMyAdmin;配置文件如下:
Alias “/wp” “/usr/local/httpd/htdocs/wordpress”
<Directory /usr/local/httpd/htdocs/wordpress>
Options Indexes FollowSymLinks
AllowOverride none
Require all granted
</Directory> #phpMyAdmin配置文件类似
浏览器访问/wp提示404错误,去掉Alias定义后访问成功
排查:
1、selinux是否关闭:关闭
2、防火墙是否关闭:关闭
3、站点目录的属主权限是否正确:无误
4、httpd是否加载Alias模块:是
5、httpd -t检查语法:显示ok
6、检查Include语句是否生效(在主配置文件中配置包含wordpress配置
文件所在的目录):Include语句生效
7、去除Alias指令,仅检查wordpress配置文件中Directory的访问控制
是否生效:不生效
8、配置wordpress的访问控制到主配置文件中,查看是否生效:否
9、任何更改的配置未生效
10、ps aux查看httpd进程,发现服务停止后进程还保留,killall杀死进程
后再运行主进程,配置成功生效
11、发现问题:服务脚本的配置有问题,执行服务重启时,进程并未
停止并重新启动,未载入配置文件
总结:
1、对服务脚本理解不够
2、排错过程过于复杂,对于httpd的理解不够