Ubuntu用Nginx安装WordPress并与sing-box、v2ray、Xray等代理共存
一、Nginx Web 服务器的安装
1、更新软件列表(windows可使用finalshell,Mac os可使用finalterm ssh连接到vps服务器):
sudo apt update2、升级已安装的软件( 不想更新可跳过,毕竟全部更新需很长时间,根据新的列表,升级所有可以升级的软件):
sudo apt upgrade3、安装nginx。
sudo apt-get install nginx若已安装代理,并使用了80、443端口,可使用下面命令先解除端口占用:
#Try to run the following two commands: 关闭其他程序占用端口
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp4、使用以下 systemctl 命令启动、启用和验证 Nginx 的状态。
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx二、安装 PHP 和 MariaDB 服务器
1、为了使 Nginx 能够运行 WordPress,您需要安装 PHP、PHP-FPM 和 MariaDB 软件包。
sudo apt-get install php php-mysql php-fpm php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip mariadb-server mariadb-client2、验证MariaDB数据库服务是否正在运行,并且已启用在系统启动时自动启动。
sudo systemctl status mariadb
sudo systemctl is-enabled mariadb3、为了与FastCGI后端进行通信,服务器上必须启用PHP-FPM服务。
a)、通过执行下面的命令查看 PHP-FPM 版本。
php -v或者打开文件目录 /etc/php,查看哪个版本有fpm文件夹。

b)、启用 PHP-FPM 服务。
sudo systemctl start php8.3-fpm #将8.3改为服务器当前安装的版本
sudo systemctl enable php8.3-fpm #将8.3改为服务器当前安装的版本
sudo systemctl status php8.3-fpm #将8.3改为服务器当前安装的版本4、运行随 MariaDB 软件包提供的脚本来确保您的 MariaDB 安装安全。
sudo mysql_secure_installation运行脚本后,它将带您回答一系列问题,以便通过以下方式提高MariaDB安装的安全性:
- 输入当前 root 用户的密码(不设置或没有则直接回车): 输入密码然后回车
- 设置根密码?[Y/n] n
- 更该root密码?[Y/n] n
- 删除匿名用户?[Y/n]
y - 禁止远程登录 root 用户?[Y/n]
y - 删除测试数据库和访问权限?[Y/n]
y - 现在重新加载权限表吗?[Y/n]
y

三、WordPress 安装
1、WordPress需要一个数据库来存储服务器上的数据,因此请使用如下命令为您的网站创建一个新的 WordPress 数据库。
a)、以root身份登录msql数据库,提示输入密码则输入已设置的密码并回车。
mysql -u root -pb)、列出当前数据库,以免重名。
SHOW DATABASES;c)、创建一个名为 wordpress(可任意设置为自己喜欢的名称)的新数据库。
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;d)、可列出已有用户,以免重名。
SELECT User, Host FROM mysql.user;e)、创建新用户并设置密码,用户名(abcde)及密码(123456xyz)自行设置。
CREATE USER 'abcde'@'%' IDENTIFIED BY '123456xyz';f)、授予新建用户对新建的名为 wordpress 数据库的访问权限,回车并退出。
GRANT ALL ON wordpress.* TO 'abcde'@'%';
GRANT ALL PRIVILEGES ON wordpress.* TO 'abcde'@'%';
FLUSH PRIVILEGES;
EXIT;2、创建 WordPress 虚拟主机根路径,下载 WordPress 存档,解压缩后,然后执行递归复制到 /var/www/wordpress。
sudo mkdir -p /var/www/wordpress/ #可改为自己当前服务器专门放网站的目录
wget http://wordpress.org/latest.tar.gz
tar xfvz latest.tar.gz
sudo cp -r wordpress/* /var/www/wordpress #可改为自己当前服务器专门放网站的目录3、为了顺利安装WordPress并能上传媒体文件,请授予 Nginx www-data 系统用户对 /var/www/wordpress 路径的写入权限。
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;4、修改wp-config.php(若名称不为此,如为:wp-config-sample.php,则需重命名),链接新建的数据库及用户。
a)、获取新的随机加密码。
cd /var/www/wordpress && curl -s https://api.wordpress.org/secret-key/1.1/salt/b)、打开wp-config.php文件,复制获取的随机加密码到对应的位置。

c)、设置链接的数据库(wordpress)、用户名(abcde)及密码(123456xyz)。

d)、文件末尾还需加入以下一行代码。
define('FS_METHOD', 'direct');四、为 WordPress 网站创建一个 NGINX 虚拟主机配置
1、运行以下命令来创建 WordPress 服务器配置文件。
sudo vim /etc/nginx/conf.d/abcde.com.conf #abcde.com 需改为自己的域名,二级域名、三级域名或顶级域名都可以,请打开域名服务商DNS记录设置,并解析到此服务器或打开目录 /etc/nginx/conf.d,新建文件名为:abcde.com.conf 的文件。
2、打开文件,然后添加以下内容。
server {
listen 80; #ipv4
listen [::]:80; #ipv6
server_name abcde.com; #域名,需改为自己的域名
root /var/www/wordpress; #网站根目录,需改为自己的网站实际根目录
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php {
fastcgi_pass unix:/run/php/php8.3-fpm.sock; #8.3需改为当前服务器的版本
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
}
}3、默认情况下,Nginx 将所有请求路由到 default 服务器块。因此,删除 default 服务器块以启用您的 WordPress 网站或其他您希望在同一服务器上托管的网站。
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default4、在重新启动 Nginx 服务以应用新更改之前,请检查 NGINX 配置语法是否存在错误。
nginx -t #检查语法
nginx -s reload #重新加载五、通过 Web 安装程序完成 WordPress 安装
1、打开网络浏览器,并使用网络安装程序完成 WordPress 安装。
http://abcde.com/ 或 http://SERVER_IP/
若打不开,显示不安全,请跳到第6步直接开始安装ssl证书。
2、选择 WordPress 安装语言。

3、添加网站信息,如标题、管理员用户名、密码和电子邮件地址,并做好保存以免忘记之后无法登录。然后点击安装 WordPress以继续安装。

4、WordPress 安装完成后,点击登录按钮,输入用户名及密码,进入网站管理员的控制面板。
5、输入上面创建的用户名和密码,然后点击登录,以访问网站的管理员控制面板。

6、如果想启用HTTPS,则需安装来自Let’s Encrypt的免费 SSL 证书。
sudo apt-get update -y
sudo apt-get install certbot python3-certbot-nginx -y
sudo certbot --nginx根据提示输入邮箱及域名并回车。
7、以https访问网站以检测证书是否安装成功并正确使用。
https://abcde.com/
8、更改 WordPress 上传文件大小。
a)、打开 /etc/php/8.3/fpm/php.ini 文件(8.3需改为自己服务器安装的版本),使用查找功能找到以下参数并修改
upload_max_filesize = 64M #大小可根据自己需要调整
post_max_size = 64M #大小可根据自己需要调整
max_execution_time = 300
b)、修改完成后需重启php-fpm。
sudo service php8.3-fpm restartc)、注意wordpress上传的文件名中不能含中文、空格等特殊字符,png格式的图片可能会出现不支持上传。
以下是最终的 abcde.com.conf 配置文件参考内容:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name abcde.com; #域名,需改为自己的域名
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_certificate /etc/letsencrypt/live/abcde.com/fullchain.pem; # abcde.com 需修改为自己的域名
ssl_certificate_key /etc/letsencrypt/live/abcde.com/privkey.pem; # abcde.com 需修改为自己的域名
ssl_session_timeout 5m;
include /etc/nginx/snippets/snakeoil.conf;
client_max_body_size 100M;
root /var/www/wordpress; #网站根目录
# 匹配静态资源
location ~* \.(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ {
#expires max;#缓存控制,开启资源最大缓存时间,网站设计阶段不要启用否则设计不能及时更新,设计好了在启用
#add_header Cache-Control no-store; #expires与Cache-Control只用开启一个即可,no-store 表示不缓存
add_header Cache-Control "public, max-age=3600"; #表示缓存3600秒
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args; #伪静态处理
#expires max;#缓存控制,开启资源最大缓存时间,网站设计阶段不要启用否则设计不能及时更新,设计好了在启用
#add_header Cache-Control no-store; #expires与Cache-Control只用开启一个即可,no-store 表示不缓存
add_header Cache-Control "public, max-age=3600"; #表示缓存3600秒
}
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock; #8.3需改为当前服务器版本
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param https off;
include fastcgi_params;
# 复杂网站优化:提升连接超时与缓冲区大小
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_max_temp_file_size 128m;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
}六、sing-box、v2ray、Xray等代理安装
1、由于nginx只能使用80、443端口,安装代理时需使用其它端口,推荐使用233boy的一键安装脚本,不用太折腾
a)、以下为 sing-box 安装示例。
bash <(wget -qO- -o- https://github.com/233boy/sing-box/raw/main/install.sh)运行命令后会自动安装一个为 vless+reality 的代理。
b)、还可使用 sb 命令重新打开管理,继续添加其它协议的代理如:vless+ws+tls。
此时需使用非标准的80、443端口安装,若第一次安装则会自动设定,并使用caddy转发;若已经使用过80、443端口安装,则需手动打开 /etc/caddy/Caddyfile 文件,修改端口为其它未占用的端口:
http_port 28850
https_port 33200根据提示输入域名,并确保已关掉CF域名代理,否则证书无法正常安装。
c)、如服务器需CF中转代理,则需设置为CF其它通用系列端口。
CF80系端口:80、8080、8880、2052、2082、2086、2095
CF443系端口:443、2053、2083、2087、2096、8443
http_port 2052
https_port 2083d)、还需打开/etc/caddy/233boy/*.conf文件,修改域名后的端口,与/etc/caddy/Caddyfile文件的端口(https_port 33200)保持一致。
abcde.com:33200 {
reverse_proxy /440a36a0-1af8-4cad-9c94-f5b0cceaf62c 127.0.0.1:33789
import /etc/caddy/233boy/abcde.com.conf.add
}e)、查看caddy证书保存位置是否有域名对应的证书,打开 /root/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory ,如有名称为设置域名的文件夹,打开文件夹里面有 *.key、*.crt、*.json 三个文件则证书已正常安装。
f)、端口修改完成后记得使用以下命令重启sing-box及caddy。
sing-box restart caddyg)、服务器需CF中转代理的,安装好代理后再打开CF域名代理。
h)、若服务器使用其它端口无法安装证书,可先停止nginx服务,使用80、443端口安装好代理后再手动修改为其它端口,再重新启动 nginx 服务,可使用以下命令:
#退出停止
nginx -s quit
sudo service nginx stop
#检查文件
nginx -t
#重新加载文件
nginx -s reload
#重启nginx失败时使用
#Try to run the following two commands: 关闭其他程序占用端口
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp
#Then execute,重启服务
sudo service nginx restart