Debian12 搭建LNMP环境,配置SSL证书,安装WordPress

Debian12 搭建LNMP环境,配置SSL证书,安装WordPress

一、安装并配置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-datalisten.group = www-data,nginx的配置文件中的user需要和其一致。

image

二、安装并配置NGINX

安装NGINX

apt install nginx -y

查看nginx的缺省配置文件: nano /etc/nginx/nginx.conf,查看include /etc/nginx/conf.d/*.conf;下面是否有include /etc/nginx/sites-enabled/*;这一行,如果没有手动添加进去。

image

创建虚拟主机

为网站创建一个存放文件的目录,也就是网站根目录文件夹。

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证书。

image

解决: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

如下图,就申请成功了。

image

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会被自动调用,让服务器生效。

image

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了。

image

四、安装并配置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密码,后面根据提示操作就可以。

image

接下来我们就要为安装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;

image

五、安装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

image

打开网址进入WordPress安装界面。根据提示操作即可。

image

image

image

image

image

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容