首页 > 其他分享 >Debian12 搭建LNMP环境,配置SSL证书,安装WordPress

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

时间:2024-10-28 23:10:50浏览次数:7  
标签:drcodes cn ssl nginx LNMP SSL WordPress claw php

一、安装并配置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 protected]

断开终端再重新链接,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

标签:drcodes,cn,ssl,nginx,LNMP,SSL,WordPress,claw,php
From: https://www.cnblogs.com/drcode/p/18511888/debian-lnmp-acmesh-ssl-wordpress

相关文章

  • httpsok:自动续期SSL证书的最佳选择!
    一、引言        在数字化时代,网站的安全性至关重要,而SSL证书是保护用户数据、提升网站信誉的关键。然而,证书的续期往往令人头痛。今天,我们为你介绍一款高效的SSL证书自动续期工具——httpsok,让你的证书管理变得轻松无忧。二、什么是httpsok?httpsok是一款专为网站......
  • lamp和lnmp
    LAMP和LNMP区别:1、架构上:LAMP==Linux+Apache+Mysql+PHPLNMP==Linux+Nginx+Mysql+PHPL:Linux操作系统,提供了项目部署时所需要的操作系统环境A:Apache服务器:WEB应用程序的服务器,提供软件源文件的存放地,提供了程序访问时所需要的端口(接口)M:MySQL数据库,提供项目或者程序在使用......
  • pg系数据库经典报错,no pg_hba.conf entry for host “x.x.x.x“, user “xxx“, datab
            上一篇文档述说了pg的一个经典报错“currenttransactionisaborted,commandsignoreduntilendoftransactionblock”【经典报错1】,这次再来述说一个pg系数据的经典报错。        pg系数据库指的是postgre、greenplum、国产数据中的kingbase、g......
  • wordpress网站模板修改的教程?
    WordPress网站模板修改教程1.备份网站重要性:在进行任何修改之前,确保备份整个网站,包括数据库和文件。工具:可以使用如UpdraftPlus、All-in-OneWPMigration等插件进行备份。2.选择编辑方式直接编辑:通过WordPress后台或FTP访问服务器直接编辑模板文件。子主题:推荐使用子......
  • 宝塔安装wordpress出现500错误
    当在宝塔面板安装WordPress时遇到500错误,通常表示服务器端出现了问题。以下是排查和解决500错误的一些常见步骤:1.检查错误日志首先,查看网站的错误日志,以获取更多关于500错误的详细信息。访问宝塔面板:进入宝塔面板,找到你的网站。点击“设置”->“日志”->“查看错误日......
  • OpenSSL
    OpenSSL概述OpenSSL是一个开源的、安全传输协议实现工具,广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中,OpenSSL被用于构建和维护SSL/TLS通信,确保数据在传输过程中的机密性和完整性。简单来说,OpenSSL是一个用于加解密SSL文......
  • openssl生成esxi过期证书
    1,使用openssl生成证书步骤1:生成私钥和自签名证书使用以下命令一次性生成一个新的私钥和自签名证书:shell复制代码opensslreq-x509-nodes-days365-newkeyrsa:2048-keyoutmycert.key-outmycert.crt-x509:表示生成一个自签名证书。-nodes:不对私钥加密(即不需要密码......
  • wordpress接入腾讯云COS,50G月免费流量
    对象存储COS是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持HTTP/HTTPS协议访问的分布式存储服务。腾讯云COS的存储桶空间无容量上限,无需分区管理,适用于CDN数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景,适用于网站需要实时访问、频繁访......
  • 【2024有效】WordPress忘记密码找回登录密码的最简单有效的方法
    这个找回Wordpress后台密码密的方法,前提是,可以操作数据。 最近忘记了极客侠网站登陆密码,还是按照以前的方法,进入数据库直接修改数据库,但是现在wordpress密码的加密不是简单的MD5所以不能用一个md5加密好的密码去替换数据库,这里的关键所在就是不知道现在的加密方式,于是又百......
  • SSL证书常见问题解答
    在当今的数字时代,确保网站和数据的安全性变得尤为重要。SSL(SecureSocketsLayer)证书作为保障网站安全的关键组件,广泛应用于各种在线服务中。然而,在SSL证书的申请、安装和使用过程中,用户常常会遇到各种问题。本文旨在提供一个全面的指南,帮助用户理解并解决SSL证书的常见问题。......