前言
由于本人linux操作技术实在稀碎,apache总是碰到莫名其妙的bug,关键是现在网上使用apache的人也越来越少,资料难找,这次更改ssl证书把网站彻底搞崩了(现在想来可能是证书权限问题),总算让我只能放弃apache转向nginx。。记录一下。
关于Nginx
Nginxe并不能够直接使用.php文件,所以直接设置目录是不会生效的,需要php-fpm解析后才能访问。
安装、设置php-fpm
可以参考Nginx中文文档,版本有点老,到php官网下载最新的比较好。
代码
wget https://www.php.net/distributions/php-8.0.10.tar.gz
tar zvxf php-8.0.10.tar.gz
cd php-8.0.10
./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt \
--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --with-pdo --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli \
--with-gd --with-jpeg-dir
make
make install
可能由几个包会提示更新,跟着提示来就行了。
然后更改config文件vim /etc/php-fpm.d/www.conf
,找到listen =…
更改为listen = /var/run/php-fpm.sock
,并取消行首的分号注释符,不用在意当前还没有这个文件,重启php-fpm后会自动创建,更改listen.owner = apache
、listen.group = apache
、listen.mode = 0660
,原本是apache的话一般用户和用户组都是apache,不清楚的话可以在httpd.conf中查看;
更改/etc/php.ini
文件cgi.fix_pathinfo=0
并取消注释, 这是一种安全措施。 如果此参数设置为“1”,php-fpm将尝试通过查找请求的文件来提供PHP文件,然后如果没有找到完全匹配,它将尝试猜测并返回一个紧密匹配。这是非常不安全的,因为它可以允许您的网站向外部用户暴露敏感信息。 对于php-fpm来说,如果文件与请求的文件完全匹配,则返回更安全,否则返回错误给用户。
更改/etc/php-fpm.conf
,,修改user = apache
、group = apache
两项。
最后service php-fpm restart
,没报错就OK了。
安装、设置Nginxe
图方便直接使用yum install nginx
安装nginx。愿意折腾可以自己编译安装,功能会更全一点。
更改nginx.conf
同样将user改为apache,删除server{…}
,将server内容写到/etc/nginx/conf.d
中,方便管理
vim /etc/nginx/conf.d/de.conf
server {
listen 80;
server_name ***.com;#改为自己的域名
return 301 https://server_namerequest_uri;#强制https
}
server {
# 服务器端口使用443,开启ssl
listen 443 ssl;
# 域名,多个以空格分开
server_name ***.com;#改为自己的域名
# ssl证书地址
ssl_certificate /***.crt;
ssl_certificate_key /***.key;#填写正确路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
fastcgi_buffers 512 64k;
root /var/www/html;
index index.php;
location / {
try_files uriuri/ /index.php?q=uri&args;
}
location ~ \.php{
try_filesuri =404;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
#include fastcgi_params;
include fastcgi.conf;
}
location = /favicon.ico {#为Nginx如何尝试提供favicon请求和robot.txt请求创建一些规则。
log_not_found off;#我们不需要记录此信息的请求。
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {#拒绝访问任何隐藏的文件夹(由Linux系统中的起始点表示)。
deny all;#这将阻止我们服务可能已被用于Apache的配置,
}#例如文件.htaccess文件
location ~* /(?:uploads|files)/.*\.php$ {#防止在uploads或files目录中运行或访问任何PHP文件。
deny all;#这可以防止我们的服务器执行恶意代码。
}
}
然后运行nginx,使用命令service nginx restart
,没提示错误就是顺利完成了,然后测试网站是否能正常访问。如果出现了错误,/var/log/nginx/error.log
会记录错误原因,,本人碰到了502错误,参考NGINX 502 Bad Gateway: PHP-FPM这篇文章完成修改。
其他问题
控制台页面混乱
原因:http://…..com/wp-admin/load-styles.php?c=1&dir=ltr&load=dashicons,admin-bar,wp-admin,buttons,wp-auth-check&ver=4.1.1 这个url的内容太大,大概有3百多KB,nginx的fcgi buff有限,导致无法正常加载css。
解决:在server中加入fastcgi_buffers 512 64k 即可。
php-fpm占用内存过大
可供参考的文章:Linux的php-fpm优化心得
发表文章返回500错误
日志内容open() "/var/lib/nginx/tmp/client_body/0000000001" failed (13: Permission denied)
没有权限去访问:/var/lib/nginx/tmp ,该目录主要是用来存放临时的缓存文件,直接chmod +x /var/lib/nginx -R
解决。