卸载并安装Nginx

卸载

$ systemctl stop nginx
$ rpm -qa | grep nginx
# 将上个命令输出的有关nginx包一一删除
$ rpm -e nginx-1.20.1-10.el7.x86_64
$ rpm -e nginx-filesystem-1.20.1-10.el7.noarch
$ rm -rf /etc/nginx
$ rm -rf /var/log/nginx
$ rm -rf /usr/share/nginx

安装

$ vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
$ yum install -y nginx

启用

$ systemctl start nginx
$ systemctl enable nginx

Nginx配置文件

$ cd /etc/nginx/conf.d
$ vim example.com.conf
# 配置虚拟主机(Server Block),可以配置多个,对应不同的域名或者IP地址
server {
    listen 80;  # 监听的端口,此处为HTTP默认的80端口
    #listen 443 ssl;  # 监听HTTPS的443端口,并启用SSL
    #access_log  /var/log/nginx/host.access.log  main;
    server_name example.com www.example.com;  # 服务器域名,可以配置多个,用空格分隔,也可配置IP地址
    root /usr/share/nginx/html/example.com;  # 网站根目录,存放网站的静态文件等
    index index.html index.htm index.php;  # 默认首页文件,按顺序查找并返回第一个存在的文件
    # 配置请求的路由规则,处理不同的URL请求路径
    location / {
        try_files $uri $uri/ =404;  # 尝试按顺序查找文件,如果找不到则返回404错误
    }

    # 处理静态文件请求,如图片、CSS、JavaScript文件等,设置缓存时间等
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;  # 设置缓存有效期为30天
        access_log off;  # 可以关闭对这类静态文件的访问日志记录,减少I/O操作
    }

    # 错误页面配置,自定义不同状态码对应的错误页面显示内容
    error_page 404 /404.html;  
    error_page 500 502 503 504 /50x.html;
    location = /404.html {
        root /usr/share/nginx/html/example.com/errors;
    }
    location = /50x.html {
        root /usr/share/nginx/html/example.com/errors;
    }
    
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    
    location ~ \.php$ {
#        root            example.com;
        fastcgi_pass    127.0.0.1:9001;
#        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
#        fastcgi_param   SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include         fastcgi_params;
    }
    
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
    
    # SSL证书和私钥文件路径,替换为实际申请的证书和对应的私钥文件
    #ssl_certificate /etc/nginx/ssl/example.com/example.com.crt;  
    #ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;  

    # SSL协议及加密套件配置,选择合适且安全的配置,不同版本的Nginx和系统支持略有不同
    #ssl_protocols TLSv1.2 TLSv1.3;  
    #ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    #ssl_prefer_server_ciphers on;  
}

卸载并安装PHP8.3.8

卸载

$ systemctl stop php-fpm
$ rpm -qa | grep php
$ yum remove php php-cli php-fpm -y

安装

$ yum update -y
$ yum install epel-release -y
$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum install gcc gcc-c++ make autoconf libtool libxml2-devel openssl-devel bzip2-devel $ libcurl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel readline-devel libxslt-devel -y
# 启用 Remi 仓库的 PHP 8.3 模块
$ yum-config-manager --enable remi-php83
# 安装 PHP 8.3.8 的核心包以及一些常用的扩展,比如用于处理 HTTP 请求、数据库连接等场景常用到的扩展
$ yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath -y

设置时区

$ /etc/php.ini
date.timezone = Asia/Shanghai

PHP配置文件

$ vim /etc/php-fpm.d/www.conf
[example_com]
listen = 127.0.0.1:9003  ; 设置监听的IP地址和端口为127.0.0.1:9003
listen.owner = nobody  ; 通常设置为 nobody 用户,可根据实际权限需求调整
listen.group = nobody  ; 设置对应的用户组,一般和用户保持一致
listen.mode = 0660  ; 设置文件权限模式
user = nobody  ; PHP-FPM运行时使用的用户,一般为 nobody 等非 root 用户
group = nobody  ; 对应的用户组
pm = dynamic  ; 进程管理方式,dynamic表示动态管理进程数量,也可根据需要选择其他方式如 static
pm.max_children = 50  ; 最大子进程数量,可根据服务器性能和网站负载调整
pm.start_servers = 20  ; 启动时创建的初始子进程数量
pm.min_spare_servers = 10  ; 最少空闲子进程数量
pm.max_spare_servers = 30  ; 最大空闲子进程数量

启动 PHP 相关服务

$ systemctl start php-fpm
$ systemctl enable php-fpm

升级权限(可选)

升级文件操作权限

$ cd /usr/share/nginx/html
$ chmod -R 777 example.com
# 以wordpress为例
$ vim example.com/wp-config.php
define("FS_METHOD", "direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);

回收站(搭建Nginx过程的垃圾配置)

Nginx配置文件

# 全局配置段,影响整个Nginx服务器的运行
user nginx;  # 设置运行Nginx工作进程的用户,一般设置为非root用户,此处假设为nginx用户
worker_processes auto;  # 根据服务器的CPU核心数自动设置工作进程数量,也可指定具体数值如 worker_processes 4;

# 错误日志路径及日志级别,debug、info、notice、warn、error、crit,从左到右级别依次升高,生产环境一般设置为error等合适级别
error_log /var/log/nginx/error/example.com/error.log error;  

# PID文件存放路径,记录Nginx主进程的PID,用于进程管理等操作
pid /var/run/nginx.pid;

# 工作进程相关的配置,如每个工作进程可以打开的最大文件描述符数量等
worker_rlimit_nofile 65535;  

# 配置事件驱动模型及相关参数,在Linux下一般自动选择合适的模型,如epoll等
events {
    use epoll;  # 使用epoll事件驱动模型(Linux系统下高效的模型)
    worker_connections 10240;  # 每个工作进程允许的最大并发连接数
}

# HTTP配置块,用于配置HTTP相关的服务器、虚拟主机、各种模块等功能
#http {
# 设置字符集,确保正确处理不同字符编码的请求和响应内容
charset utf-8;  

# 客户端请求头中最大的字段大小,防止恶意构造超大请求头攻击
client_max_body_size 10m;  

# 设置MIME类型与文件扩展名的映射关系,用于正确识别响应内容的类型
#include /etc/nginx/mime/example.com/mime.types;  
#default_type application/mime/example.com/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/example.com/access.log main;  

# 开启高效的文件传输模式,在发送静态文件时可以更快速地响应客户端
sendfile on;  
# 避免网络阻塞时,Nginx在一个TCP连接上等待发送缓冲区完全清空后再发送下一个响应的情况,提高性能
tcp_nopush on;  
# 允许在一个TCP连接上发送多个响应,提升性能(对于keep-alive连接有效)
tcp_nodelay on;  

# 连接超时设置,客户端连接服务器后,在一定时间内没有活动则断开连接
keepalive_timeout 65;  
# 客户端请求头读取超时时间,防止客户端一直不发送完整请求头而占用服务器资源
client_header_timeout 10;  
# 客户端请求体读取超时时间
client_body_timeout 10;  
# 服务器响应客户端请求的超时时间
send_timeout 10;  

# 开启文件缓存,提高对静态文件的访问速度,减少磁盘I/O操作
open_file_cache max=1000 inactive=20s;  
open_file_cache_valid 30s;  
open_file_cache_min_uses 2;
open_file_cache_errors on;

# 配置虚拟主机(Server Block),可以配置多个,对应不同的域名或者IP地址
server {
    listen 80;  # 监听的端口,此处为HTTP默认的80端口
    #listen 443 ssl;  # 监听HTTPS的443端口,并启用SSL
    server_name example.com www.example.com;  # 服务器域名,可以配置多个,用空格分隔,也可配置IP地址
    root /usr/share/nginx/html/example.com;  # 网站根目录,存放网站的静态文件等
    index index.html index.htm index.php;  # 默认首页文件,按顺序查找并返回第一个存在的文件

    # 配置请求的路由规则,处理不同的URL请求路径
    location / {
        try_files $uri $uri/ =404;  # 尝试按顺序查找文件,如果找不到则返回404错误
    }

    # 处理静态文件请求,如图片、CSS、JavaScript文件等,设置缓存时间等
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;  # 设置缓存有效期为30天
        access_log off;  # 可以关闭对这类静态文件的访问日志记录,减少I/O操作
    }

    # 反向代理配置示例,将特定路径的请求转发到后端服务器,此处假设后端服务器地址为192.168.1.100:8080
    #location /api {
    #    proxy_pass http://192.168.1.100:8080;  
    #    proxy_set_cards Host $host;  # 设置转发请求时的Host头信息,保持与原请求一致
    #    proxy_set_cards X-Real-IP $remote_addr;  # 将客户端真实IP传递给后端服务器
    #    proxy_set_cards X-Forwarded-For $proxy_add_x_forwarded_for;
    #    proxy_read_timeout 60;  # 后端服务器响应超时时间设置
    #}

    # 错误页面配置,自定义不同状态码对应的错误页面显示内容
    error_page 404 /404.html;  
    error_page 500 502 503 504 /50x.html;
    location = /404.html {
        root /usr/share/nginx/html/example.com/errors;
    }
    location = /50x.html {
        root /usr/share/nginx/html/example.com/errors;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    # SSL证书和私钥文件路径,替换为实际申请的证书和对应的私钥文件
    #ssl_certificate /etc/nginx/ssl/example.com/example.com.crt;  
    #ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;  

    # SSL协议及加密套件配置,选择合适且安全的配置,不同版本的Nginx和系统支持略有不同
    #ssl_protocols TLSv1.2 TLSv1.3;  
    #ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    #ssl_prefer_server_ciphers on;  
}