一、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)、获取新的随机加密码。

b)、打开wp-config.php文件,复制获取的随机加密码到对应的位置。

cd /var/www/wordpress && curl -s https://api.wordpress.org/secret-key/1.1/salt/

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 安装语言。

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格式的图片可能会出现不支持上传。

9、网络优化与缓存设置,降低服务器负载

a)、打开Nginx服务器主文件,/etc/nginx/nginx.conf ,在http{……}内加入以下代码:

        fastcgi_cache_path /var/www/wordpress/cache/php_cache levels=1:2 keys_zone=php_cache:100m inactive=60m max_size=1g; #缓存路径,自行设置,没有这些文件夹新建即可,keys_zone= 后的php_cache为缓存文件名
        fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 定义缓存键名

b)、打开服务器域名配置文件,/etc/nginx/conf.d/abcde.com.conf,在server{……}内加入以下代码:

            # 复杂网站优化:提升连接超时与缓冲区大小
            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;

            # 启用定义的缓存区
            fastcgi_cache php_cache; #需与keys_zone=后的名称保持一致
            # 针对不同 HTTP 状态码设置缓存时间
            fastcgi_cache_valid 200 301 302 60m;
            fastcgi_cache_valid 404 502 1m;
    
            # 避免特定条件下的缓存问题
            fastcgi_cache_use_stale error timeout invalid_header http_500;
            fastcgi_cache_min_uses 1; # 资源被请求至少几次后才缓存
            fastcgi_cache_bypass $http_cookie; # 绕过缓存(可根据实际业务调整)
            fastcgi_no_cache $http_cookie;     # 不存储缓存
    
            # 将缓存状态添加到响应头(调试非常有用,如 X-Cache: HIT/MISS/BYPASS)
            add_header X-Cache $upstream_cache_status;

10、Nginx服务器虚拟主机配置文件内容,可自行参考

a)、nginx.conf配置文件参考内容:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

        # 定义缓存路径、目录层级、内存区域名称及大小、非活动时间、最大磁盘占用
        fastcgi_cache_path /var/www/wordpress/cache/php_cache levels=1:2 keys_zone=php_cache:100m inactive=60m max_size=1g;
        fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 定义缓存键名

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

b)、 abcde.com.conf 配置文件参考内容:

server {
        listen 80;#ipv4
        listen [::]:80;#ipv6
        server_name abcde.com;
    if ($host = abcde.com) {
        return 301 https://$host$request_uri;#将http请求重定向到https
    } # managed by Certbot
}

server {
	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;

            # 启用定义的缓存区
            fastcgi_cache php_cache; #需与keys_zone=后的名称保持一致
            # 针对不同 HTTP 状态码设置缓存时间
            fastcgi_cache_valid 200 301 302 60m;
            fastcgi_cache_valid 404 1m;
    
            # 避免特定条件下的缓存问题
            fastcgi_cache_use_stale error timeout invalid_header http_500;
            fastcgi_cache_min_uses 1; # 资源被请求至少几次后才缓存
            fastcgi_cache_bypass $http_cookie; # 绕过缓存(可根据实际业务调整)
            fastcgi_no_cache $http_cookie;     # 不存储缓存
    
            # 将缓存状态添加到响应头(调试非常有用,如 X-Cache: HIT/MISS/BYPASS)
            add_header X-Cache $upstream_cache_status;
        }
	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失败时使用
#Try to run the following two commands: 关闭其他程序占用端口
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp
#Then execute,重启服务
sudo service nginx restart

#检查文件
nginx -t

#重新加载文件
nginx -s reload