ubuntu+nginx搭建wordpress的建站教程

前言

  前阵子虽然基于apache搭建了wordpress的网站,但想扩展功能时发现apache相关的资料太少了。网上说市场占有率高,社区资料丰富啥的,但我就搭建个基础的web网站,搜一圈资料发现反而是nginx的相关资料更多一些。研究对比它俩的特性,用人话说就是:
    apache主要优点是扩展性高、功能多、bug少够稳定、适合动态网页;
    nginx的主要是搭建简单、配置简单、互联网资料够多、适合静态网页;
  对比发现nginx更适合我,本身特性更适合,资料够多,优化网站也更方便。

环境

ubuntu-22.04
nginx-1.18.0
php 8.1

安装软件

安装nginx

  1.安装前更新系统软件,这里我就更新了一下列表,服务器追求稳定,就用当前版本的发布包就够了。没安装最新的软件包。

sudo apt update //
sudo apt full-upgrade -y
sudo reboot

  2.下载安装nginx

sudo apt install nginx//安装nginx

  测试是否安装成功,一般网络没问题的情况下,直接在浏览器输入ip,有下面的界面就显示成功了。



  若打不开网页,先配置一下nginx的文件。一般nginx的配置文件有三个,配置哪个都行分别是:

/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/sites-enabled

  其中/etc/nginx/nginx.conf为主配置文件,在nginx读取配置文件时,首先读取nginx.conf,然后读取/etc/nginx/conf.d中以conf结尾的文件,最后读取/etc/nginx/sites-enabled链接的文件。
  这里我是在第三个目录sites-available下建立配置文件,然后软链接到sites-enabled中。

cd /etc/nginx/sites-available
sudo vim xxx.conf //输入配置文件

  填充如下的配置内容

server {
   listen 80; #监听端口
   listen 443; #监听端口
   server_name localhost; #域名解析
   root /var/www/html; #html所在目录

   location / {
      index index.html index.nginx-debian.html;  #html的名字
   }
}

  其实直接在sites-enabele中建立配置文件也没问题,但按教程走不会出错。

sudo ln -s /etc/nginx/sites-available/xxx.conf /etc/nginx/sites-enabled/  //链接
sudo service nginx restart //重启nginx服务

  此时再次尝试,应该会有这个界面了。



  注意:如果没刷新出来,可能是如下四个问题。
  1.浏览器默认https,这里的配置暂时没有ssl证书,所以是http协议。输入时应该是http://ip。然后能通的话会提示你网站不安全,不用管,点允许即可。
  2.浏览器缓存没清理,清理浏览器缓存历史。
  3.防火墙没关,前期可以关闭整个防火墙,后期再配置只开固定的几个端口。

sudo ufw disable
或者
sudo systemctl disable firewalld

  4.服务没启动,重启nginx服务。

sudo systemctl start nginx
sudo systemctl restart nginx

安装php

  现在网页都是php的,wordpress也不例外,想让网站显示wordpress需要安装php。

 sudo apt-get install php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-opcache php8.1-mbstring php8.1-xml php8.1-gd php8.1-curl -y

安装mysql

  1.安装

sudo apt install mysql-server

  2.创建mysql数据库root用户

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

  3.运行安全安装脚本以设置 MySQL 的安全选项:

sudo mysql_secure_installation

  按照提示操作,设置 root 密码并删除匿名用户、不允许远程 root 登录等。

  4.创建wordpress的数据库

CREATE DATABASE wordpress;
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';
FLUSH PRIVILEGES;
#退出mysql数据库终端
EXIT;

安装wordpress

  在家目录中下载wordpress压缩包,解压挪到/var/www/html目录下。

下载wordpress包到家目录下
cd ~/
wget https://wordpress.org/latest.tar.gz
解压
tar -vxf latest.tar.gz
挪到nginx服务器读取网页的目录下
sudo mv wordpress /var/www/html/

#给/var/www/html/目录设置权限
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress

配置及优化

配置网络

  打开/etc/nginx/sites-enabled下的xxx.conf

sudo vim xxx.conf

  添加如下内容

server
{
    listen 80;
    listen 443 ssl;
    server_name www.域名.com 域名.com;
    index index.php index.html index.htm default.php default.htm default.html;
   root /var/www/html/wordpress;

    ssl_certificate    /etc/ssl/xxx.pem;//指定 SSL 证书文件的路径。这个文件包含了服务器的 SSL 证书和中间证书。
    ssl_certificate_key    /etc/ssl/xxxx.key;//指定 SSL 证书的私钥文件的路径
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;//指定允许的 SSL/TLS 协议版本。允许的协议版本包括 TLSv1.1、TLSv1.2 和 TLSv1.3
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;//指定 SSL/TLS 加密算法的优先级。下面是一组加密算法,包括 CHACHA20、AES128、AES256 和 3DES。
    ssl_prefer_server_ciphers on;控制是否优先使用服务器端定义的加密算法。设置为 on 时,客户端将会优先使用服务器端定义的加密算法。
    ssl_session_cache shared:SSL:10m;//配置 SSL 会话缓存,以减少 SSL 握手的时间和资源消耗。使用了一个共享的内存块来存储 SSL 会话信息,大小为 10MB。
    ssl_session_timeout 10m;//配置 SSL 会话的超时时间。设置为 10 分钟。

    client_max_body_size 128M;  # 设置请求体大小限制为100MB

    location / {
         try_files $uri $uri/ =404;
         }

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
                 fastcgi_pass unix:/run/php/php8.1-fpm.sock;
            }
    location ~ /\.ht {
                 deny all;
            }
}

  获取ssl证书
  1.找到ssl证书



  2.下载对应的证书



  3.将证书放到/etc/ssl/下解压
  将对应的文件以绝对路径填至对应位置,即可使用自己的ssl证书了。



  将下载的文件放到自己想要放置的目录下,填充到对应的ssl_certificate和ssl_certificate_key的属性下。
  ssl_ciphers的参数设置方式:

获取加密算法列表
openssl ciphers -v

  这是在网上搜到的加密方式,任选一种即可。

ssl_ciphers 'EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

  注意:这里server_name填自己申请的域名,没有域名不填默认即可。

配置wordpress

cd /var/www/html/wordpress
#创建一个名为 wp-config.php 的新文件
cp wp-config-sample.php wp-config.php
编辑wp-config.php
vim wp-config.php

  在打开的文件中,您需要提供数据库连接和认证相关的信息:
  将define(‘DB_NAME’, ‘database_name_here’);中的 database_name_here 替换为您的数据库名称
  将 define(‘DB_USER’, ‘username_here’); 行中的 username_here 替换为数据库用户名称(例如 ‘wordpressuser’)
  将define(‘DB_PASSWORD’, ‘password_here’);中的 password_here 替换为数据库用户密码
  如果数据库位于本地主机(与 WordPress 安装在同一台服务器上),您可以保留以下行不变: define(‘DB_HOST’, ‘localhost’); 如果数据库位于其他服务器上,您需要将 ‘localhost’ 替换为数据库服务器的 IP 地址或域名。
  如果您的数据库使用默认的 MySQL 端口(3306),则无需更改以下行: define(‘DB_PORT’, ‘3306’); 如果数据库使用不同的端口,请将 ‘3306’ 替换为正确的端口号。
  注意:修改后需重新设置权限。
  整体设置完成后即可成功访问自己的网站了。

优化nginx

  配置基础教程完成后,总想让自己的网页响应刷新快点,所以这里有几个加速的技巧

网页压缩

  压缩网页体积,增快访问速度。

填充到这下面
ssl_session_timeout 10m;//配置 SSL 会话的超时时间。设置为 10 分钟。
    gzip on;# 启用 gzip 压缩
    gzip_comp_level 5; # 压缩级别(1-9,级别越高,压缩率越高,但消耗 CPU 资源越多
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 禁止压缩响应中包含 Vary 头的响应
    gzip_min_length 256;# 配置不压缩的文件大小(小于该值的文件不进行压缩)
    gzip_proxied any;# 禁止压缩响应中包含 Vary 头的响应
    gzip_disable "MSIE [1-6]\.";# 禁用压缩的用户代理(在此列出的用户代理不会被压
    gzip_buffers 16 8k;# 启用压缩的缓冲区大小
    gzip_http_version 1.1;# 启用压缩的压缩级别
    gzip_static on;# 启用压缩的缓存时间
client_max_body_size 128M;  # 设置请求体大小限制为100MB 

图片缓存

  我没用这个模块,虽然背景使用了静态随机api导致背景刷新比较慢,但网页缓存是链接后建立一个指定大小的缓存区,我这个网页背景已经显示出来了,后面不需要再换背景了,而文章图片多,不需要快速显示。整体就没需求,就没研究配置,这里把方法放在下面。

proxy_cache_path /path/to/cache //配置缓存区位置
levels=1:2 //指定存储目录的层次结构。
keys_zone=my_cache:10m //定义缓存键值对的名称和大小
max_size=10g //设置缓存的最大大小。
inactive=60m //定义缓存文件在一定时间内未被访问时被认为是不活跃的,Nginx会删除这些不活跃的缓存文件。
use_temp_path=off; //禁用临时路径。

location ~* \.(png|jpg|jpeg|gif|ico)$ { //指定了匹配图片文件的位置。
    proxy_cache my_cache; //将图片文件缓存到名为 my_cache 的缓存区域
    proxy_cache_valid 200 60m; //定义缓存的有效期,这里是 60 分钟
    proxy_cache_key "$scheme$request_method$host$request_uri"; //设置缓存键值,这里使用了一些请求信息作为键值
    proxy_pass http://backend_server; //定义了后端服务器的地址
}

防盗链

  使用私人图库最怕的就是盗链,云服务器每月流量不多,真要被盗链了怕不够用。实际不用担心,本身自己的网站就没啥访问量且图片也没多少,一个月200G能用几十G都撑死了。但该做还是要做的。
  在nginx中添加下面这段就可以了。

location ~* \.(png|jpg|gif)$ {
    valid_referers yanwenkai.com www.yanwenkai.com;
    if ($invalid_referer) {
        return 403;
    }
}

增加wordpress的上传文件体积上限

  我使用的主题是argon,大小超过2兆限制,因此要照着例程修改上传大小限制。但当你照着改完后,大概率还是无法上传成功,这时就需要更改apapche的设置了。
  1.打开apache的配置文件

vim /etc/php/8.1/apache2/php.ini

  2.配置php.ini文件
  以上传500M以下大小的文件为例,查找以下选项并修改。

file_uploads = On ;打开文件上传选项 
upload_max_filesize = 500M ;上传文件上限

  如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长

post_max_size = 500M ;post上限 
max_execution_time = 1800 ; Maximum execution time of each script, in seconds脚本最大执行时间 
max_input_time = 1800 ; Maximum amount of time each script may spend parsing request data 
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)内存上限

3.重启服务

service php8.1-fpm restart
service apache restart

  至此基于nginx搭建的wordpress个人博客就搭建完成了

评论

  1. zhangxy
    Windows Chrome 123.0.0.0
    6 月前
    2024-4-28 9:47:25

    请问怎么样把浏览器输入域名定向到wordpress主页,而不是需要输入 域名/worpress形式 这样的形式

    • 博主
      zhangxy
      Windows Edge 124.0.0.0
      5 月前
      2024-5-07 22:42:39

      最好发邮件,平时我看不到。你的意思是直接输入域名就可以访问自己的wordpress主页吗。首先域名要和自己的服务器ip绑定。然后把wordpress的安装素材放到/var/www/下,改名成html,就可以实现了。这个在我apache搭建网站时有提到,你可以看一下https://www.zyh8.com/archives/163/ubuntudebian%e9%83%a8%e7%bd%b2wordpress%e6%95%99%e7%a8%8b/,这个大佬第六章节讲的就是这个问题。

    • 博主
      zhangxy
      Windows Edge 124.0.0.0
      5 月前
      2024-5-07 22:45:16

      老哥,邮件不给个真实地址,我想回复你都回复不了啊!!!!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇