一、安装并配置PHP
SSH连接上VPS之后,我们先更新一下系统组件,使用下面的命令。
apt update -y && apt upgrade -y
接着输入下面的命令安装PHP和相关组件
apt install php-fpm php-mysql php-gd php-cli php-curl php-mbstring php-zip php-opcache php-xml php-mysqli -y
查看/etc/php/8.2/fpm/pool.d/www.conf
,找到listen = /run/php/php8.2-fpm.sock
,即使用套接字通讯。也可以注释掉该行,改为listen = 127.0.0.1:9000
,即使用tcp通讯,两者区别不展开阐述。
注意看listen.owner = www-data
和listen.group = www-data
,nginx的配置文件中的user需要和其一致。
二、安装并配置NGINX
安装NGINX
apt install nginx -y
查看nginx的缺省配置文件: nano /etc/nginx/nginx.conf
,查看include /etc/nginx/conf.d/*.conf;
下面是否有include /etc/nginx/sites-enabled/*;
这一行,如果没有手动添加进去。
创建虚拟主机
为网站创建一个存放文件的目录,也就是网站根目录文件夹。
mkdir -p /var/www/html/claw.drcodes.cn
创建虚拟主机配置文件
nano /etc/nginx/sites-available/claw.drcodes.cn.conf
把下面的内容粘贴进去之后,Ctrl + O 保存
server {
listen 80;
server_name claw.drcodes.cn;
root /var/www/html/claw.drcodes.cn/wordpress;
index index.html;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include snippets/fastcgi-php.conf;
}
}
上面的代码中,server_name claw.drcodes.cn;
部分,只绑定了一个域名,也可以该改成server_name claw.drcodes.cn www.drcodes.cn;
这样。
创建软连接
ln -s /etc/nginx/sites-available/claw.drcodes.cn.conf /etc/nginx/sites-enabled/
输入如下命令,第一行是检测配置文件是否正确,第二行是重载配置文件。
nginx -t
nginx -s reload
打开claw.drcodes.cn/,看到如下提示,说明虚拟主机搭建完成。但提示不安全,下一步就是通过acme.sh,配置ssl证书。
解决:connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied)
如果没有遇到不用看这一步,
装好了nginx与php8.2-fpm,两都能正常运行,但PHP文件不能正常显示,报502 Bad Gateway
错误,查看nginx的error.log,cat /var/log/nginx/gzwy.drcodes.cn.error.log
,有这样的记录:
connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.0.114, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.1-fpm.sock:", host: "192.168.0.11"
原因是php8.2-fpm 的apt安装使用了缺省用户www-data
,nginx的apt安装使用了缺省用户nginx
,/run/php/php8.2-fpm.sock
的所有者是www-data
, nginx用户无权访问,导致以上报错。
查看nginx的缺省配置文件:nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
把第一条user nginx
改成user www-data
即可。
记得重启nginx使配置生效。
或者将php和nginx都使用tcp的方式连接也能解决问题,
nano /etc/php/8.2/fpm/pool.d/www.conf
,找到listen = /run/php/php8.2-fpm.sock
,注释掉该行,改为listen = 127.0.0.1:9000
nano /etc/nginx/sites-available/gzwy.drcodes.cn.conf
,把fastcgi_pass unix:/run/php/php8.2-fpm.sock;
改为 fastcgi_pass 127.0.0.1:9000;
最后重启nginx和php-fpm,缺点是损失了一点性能。
三、安装acme.sh,配置ssl证书
具体参考:github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
1.安装 acme.sh
安装很简单, 一个命令:
curl https://get.acme.sh | sh -s email=my@example.com
断开终端再重新链接,acme.sh 命令就生效了
2. 生成证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证,这里我只用http方式验证,dns验证适用于泛域名证书。
http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
acme.sh 还可以智能的从 nginx的配置中自动完成验证, 不需要指定网站根目录:
acme.sh --issue -d claw.drcodes.cn --nginx
注意, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
acme.sh脚本默认ca服务器是zerossl,经常出错,会导致获取证书的时候一直出现:Pending, The CA is processing your order, please just wait.
只需要把ca服务器改成letsencrypt 即可,虽然更改以后还是有概率出现pending,但基本2-3次即可成功
acme.sh --set-default-ca --server letsencrypt
如下图,就申请成功了。
3. copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/
, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
先在nginx配置目录中创建证书存放目录:
mkdir -p /etc/nginx/ssl/claw.drcodes.cn
正使用 --install-cert
命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
acme.sh --install-cert -d claw.drcodes.cn \
--key-file /etc/nginx/ssl/claw.drcodes.cn/key.pem \
--fullchain-file /etc/nginx/ssl/claw.drcodes.cn/fullchain.pem \
--reloadcmd "service nginx force-reload"
(一个小提醒, 这里用的是 service nginx force-reload
, 不是 service nginx reload
, 据测试, reload
并不会重新加载证书, 所以用的 force-reload
)
Nginx 的配置
--install-cert
命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效。
echo "" > /etc/nginx/sites-available/claw.drcodes.cn.conf
清空nginx的站点配置文件,
nano /etc/nginx/sites-available/claw.drcodes.cn.conf
,修改为如下配置文件
server {
listen 80;
server_name claw.drcodes.cn;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl fastopen=3 reuseport;
server_name claw.drcodes.cn;
# 证书文件绝对路径
ssl_certificate /etc/nginx/ssl/claw.drcodes.cn/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/claw.drcodes.cn/key.pem;
# 引入ssl相关的优化代码
include snippets/ssl-params.conf;
#自定义日志路径
access_log /var/log/nginx/claw.drcodes.cn.access.log;
error_log /var/log/nginx/claw.drcodes.cn.error.log;
root /var/www/html/claw.drcodes.cn/wordpress;
index index.html;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
location ~* \.php$ {
#配置nginx和php的通信,有套接字和tcp两种
#套接字注意和/etc/php/8.2/fpm/pool.d/www.conf中的
#listen = /run/php/php8.2-fpm.sock一致
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
#tcp通信
#fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include snippets/fastcgi-php.conf;
}
}
在 /etc/nginx/snippets
目录下创建代码片段文件 ssl-params.conf 专门拿来配置 SSL 相关的设置,内容如下:
/etc/nginx/snippets/ssl-params.conf
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
# 以下配置来自 [提高安全性的最佳 Nginx 配置](https://godruoyi.com/posts/best-nginx-configuration-for-improved-security),建议参考。
server_tokens off;
add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload";
add_header X-Frame-Options deny;
add_header X-Content-Type-Options nosniff;
add_header x-xss-protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https:; connect-src 'self' https:; img-src 'self' data: https: blob:; style-src 'unsafe-inline' https:; font-src https:";
输入如下命令,第一行是检测配置文件是否正确,第二行是重载配置文件。
nginx -t
nginx -s reload
此时,提示连接是安全的,说明已经配置成功了ssl证书。现在NGINX和PHP框架已经搭建完毕,剩下的就是安装数据库和Wordpress了。
四、安装并配置MariaDB
接着安装MariaDB,网上一些资料说MariaDB与MySQL相比,它的性能更高,复制速度更快,安全措施更好,还有额外的存储引擎。
apt install mariadb-server -y
使用mysql_secure_installation脚本来提高数据库安全性。
mysql_secure_installation
输入这个命令后,有一些英文的引导提示。最开始提示:
If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
输入自己的mysql root密码,后面根据提示操作就可以。
接下来我们就要为安装WordPress做准备了,首先创建一个数据库。
mysql -uroot -p
输入上面的命令之后,需要验证数据库管理员密码。然后进入输入命令的界面,依次输入下面的命令。
CREATE DATABASE claw_wp_db;
CREATE USER claw_wp_user@localhost IDENTIFIED BY 'password';
GRANT ALL ON claw_wp_db.* TO claw_wp_user@localhost;
FLUSH PRIVILEGES;
五、安装WordPress
创建网站根目录
mkdir -p /var/www/html/claw.drcodes.cn
切换到网站根目录
cd /var/www/html/claw.drcodes.cn
wget下载wordpress安装包文件,如果提示未找到wget,使用 apt install wget
wget https://wordpress.org/latest.zip
apt install zip
,解压安装包,
unzip -q latest.zip
修改文件权限
chmod -R 755 /var/www/html/claw.drcodes.cn/wordpress
chown -R www-data:www-data /var/www/html/claw.drcodes.cn/wordpress
打开网址进入WordPress安装界面。根据提示操作即可。
暂无评论内容