Ubuntu用Nginx安装WordPress并与sing-box、v2ray、Xray等代理共存

一、Nginx Web 服务器的安装

1更新软件列表(windows可使用finalshell,Mac os可使用finalterm ssh连接到vps服务器):

sudo apt update

2、升级已安装的软件不想更新可跳过,毕竟全部更新需很长时间,根据新的列表,升级所有可以升级的软件):

sudo apt upgrade

3、安装nginx。

sudo apt-get install nginx

若已安装代理,并使用了80、443端口,可使用下面命令先解除端口占用:

#Try to run the following two commands: 关闭其他程序占用端口
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp

4、使用以下 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-client

2、验证MariaDB数据库服务是否正在运行,并且已启用在系统启动时自动启动。

sudo systemctl status mariadb
sudo systemctl is-enabled mariadb

3、为了与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 -p

b)、列出当前数据库,以免重名。

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/default

4、在重新启动 Nginx 服务以应用新更改之前,请检查 NGINX 配置语法是否存在错误。

nginx -t #检查语法
nginx -s reload #重新加载

五、通过 Web 安装程序完成 WordPress 安装

1、打开网络浏览器,并使用网络安装程序完成 WordPress 安装。

http://abcde.com/ 或 http://SERVER_IP/

若打不开,显示不安全,请跳到第6步直接开始安装ssl证书。

2、选择 WordPress 安装语言。

Screenshot

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 restart

c)、注意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的一键安装脚本,不用太折腾

https://github.com/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 2083

d)、还需打开/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 caddy

g)、服务器需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