|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. 引言
Rocky Linux作为CentOS的替代品,已经成为许多企业和开发者的首选服务器操作系统。本文将详细介绍如何在Rocky Linux服务器上完整部署PHP运行环境,从基础配置到性能优化的全流程,并提供常见问题的解决方案。
2. 系统基础配置
2.1 系统更新
在开始部署之前,首先确保系统是最新的:
- sudo dnf update -y
- sudo dnf upgrade -y
复制代码
2.2 添加EPEL仓库
EPEL(Extra Packages for Enterprise Linux)仓库提供了许多额外的软件包:
- sudo dnf install epel-release -y
复制代码
2.3 设置主机名
设置一个合适的主机名有助于识别服务器:
- sudo hostnamectl set-hostname your-server-name
复制代码
2.4 配置防火墙
Rocky Linux默认使用firewalld作为防火墙管理工具:
- # 启动并启用firewalld
- sudo systemctl start firewalld
- sudo systemctl enable firewalld
- # 检查防火墙状态
- sudo firewall-cmd --state
- # 开放HTTP和HTTPS端口
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
2.5 禁用SELinux(可选)
SELinux可能会影响某些应用的功能,如果不需要高安全性环境,可以临时禁用:
- # 临时禁用
- sudo setenforce 0
- # 永久禁用(需要重启)
- sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
复制代码
3. 安装Web服务器
3.1 安装Nginx
Nginx是一个高性能的Web服务器和反向代理服务器:
- # 安装Nginx
- sudo dnf install nginx -y
- # 启动并设置开机自启
- sudo systemctl start nginx
- sudo systemctl enable nginx
- # 检查Nginx状态
- sudo systemctl status nginx
复制代码
3.2 安装Apache(备选)
如果更倾向于使用Apache:
- # 安装Apache
- sudo dnf install httpd -y
- # 启动并设置开机自启
- sudo systemctl start httpd
- sudo systemctl enable httpd
- # 检查Apache状态
- sudo systemctl status httpd
复制代码
3.3 基本Web服务器配置
编辑Nginx主配置文件:
- sudo nano /etc/nginx/nginx.conf
复制代码
基本配置示例:
- user nginx;
- worker_processes auto;
- error_log /var/log/nginx/error.log;
- pid /run/nginx.pid;
- events {
- worker_connections 1024;
- }
- http {
- 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.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- include /etc/nginx/conf.d/*.conf;
- }
复制代码
编辑Apache主配置文件:
- sudo nano /etc/httpd/conf/httpd.conf
复制代码
基本配置示例:
- ServerRoot "/etc/httpd"
- Listen 80
- Include conf.modules.d/*.conf
- User apache
- Group apache
- ServerAdmin root@localhost
- ServerName your-server-name:80
- <Directory />
- AllowOverride none
- Require all denied
- </Directory>
- DocumentRoot "/var/www/html"
- <Directory "/var/www">
- AllowOverride None
- Require all granted
- </Directory>
- <Directory "/var/www/html">
- Options Indexes FollowSymLinks
- AllowOverride None
- Require all granted
- </Directory>
复制代码
4. 安装PHP
4.1 添加REMI仓库
REMI仓库提供了最新版本的PHP:
- # 安装REMI仓库
- sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
- # 启用REMI仓库
- sudo dnf config-manager --set-enabled remi
复制代码
4.2 安装PHP及常用扩展
根据需要选择PHP版本,这里以PHP 8.1为例:
- # 启用PHP 8.1模块
- sudo dnf module enable php:remi-8.1 -y
- # 安装PHP及常用扩展
- sudo dnf install php php-cli php-common php-fpm php-mysqlnd php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json -y
复制代码
4.3 配置PHP
编辑PHP配置文件:
推荐配置:
- memory_limit = 256M
- upload_max_filesize = 64M
- post_max_size = 64M
- max_execution_time = 300
- max_input_time = 300
- date.timezone = Asia/Shanghai
复制代码
4.4 配置PHP-FPM
编辑PHP-FPM配置文件:
- sudo nano /etc/php-fpm.d/www.conf
复制代码
推荐配置:
- [www]
- user = nginx
- group = nginx
- listen = /var/run/php-fpm/php-fpm.sock
- listen.owner = nginx
- listen.group = nginx
- listen.mode = 0660
- pm = dynamic
- pm.max_children = 50
- pm.start_servers = 5
- pm.min_spare_servers = 5
- pm.max_spare_servers = 35
- pm.max_requests = 500
- slowlog = /var/log/php-fpm/www-slow.log
- php_admin_value[error_log] = /var/log/php-fpm/www-error.log
- php_admin_flag[log_errors] = on
- php_value[session.save_handler] = files
- php_value[session.save_path] = /var/lib/php/session
复制代码
启动并启用PHP-FPM:
- sudo systemctl start php-fpm
- sudo systemctl enable php-fpm
- sudo systemctl status php-fpm
复制代码
5. 配置Web服务器与PHP集成
5.1 Nginx与PHP-FPM集成
创建Nginx站点配置文件:
- sudo nano /etc/nginx/conf.d/example.com.conf
复制代码
配置示例:
- server {
- listen 80;
- server_name example.com www.example.com;
- root /var/www/html;
- index index.php index.html index.htm;
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
- location ~ \.php$ {
- try_files $uri =404;
- fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location ~ /\.ht {
- deny all;
- }
- # 静态文件缓存
- location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
- expires 1y;
- add_header Cache-Control "public, immutable";
- }
- }
复制代码
检查Nginx配置并重启:
- sudo nginx -t
- sudo systemctl restart nginx
复制代码
5.2 Apache与PHP集成
如果使用Apache,需要安装PHP模块:
- sudo dnf install php libapache2-mod-php -y
复制代码
创建Apache站点配置文件:
- sudo nano /etc/httpd/conf.d/example.com.conf
复制代码
配置示例:
- <VirtualHost *:80>
- ServerName example.com
- ServerAlias www.example.com
- DocumentRoot /var/www/html
- <Directory /var/www/html>
- Options Indexes FollowSymLinks
- AllowOverride All
- Require all granted
- </Directory>
- ErrorLog /var/log/httpd/example.com-error.log
- CustomLog /var/log/httpd/example.com-access.log combined
- </VirtualHost>
复制代码
检查Apache配置并重启:
- sudo apachectl configtest
- sudo systemctl restart httpd
复制代码
6. 安装和配置数据库
6.1 安装MariaDB
MariaDB是MySQL的一个分支,完全兼容MySQL:
- # 安装MariaDB服务器
- sudo dnf install mariadb-server mariadb -y
- # 启动并设置开机自启
- sudo systemctl start mariadb
- sudo systemctl enable mariadb
- # 检查MariaDB状态
- sudo systemctl status mariadb
复制代码
6.2 安全配置MariaDB
运行安全配置脚本:
- sudo mysql_secure_installation
复制代码
按照提示设置root密码、移除匿名用户、禁止root远程登录等。
6.3 创建数据库和用户
登录MariaDB:
创建数据库和用户:
- CREATE DATABASE mydatabase;
- CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'strong_password';
- GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
- FLUSH PRIVILEGES;
- EXIT;
复制代码
6.4 测试数据库连接
创建PHP测试文件:
- sudo nano /var/www/html/db-test.php
复制代码
内容如下:
- <?php
- $servername = "localhost";
- $username = "myuser";
- $password = "strong_password";
- $dbname = "mydatabase";
- // 创建连接
- $conn = new mysqli($servername, $username, $password, $dbname);
- // 检查连接
- if ($conn->connect_error) {
- die("连接失败: " . $conn->connect_error);
- }
- echo "连接成功!";
- $conn->close();
- ?>
复制代码
访问http://your-server-ip/db-test.php测试数据库连接。
7. 安装额外PHP扩展
根据应用需求,可能需要安装额外的PHP扩展:
- # 安装常用扩展
- sudo dnf install php-intl php-soap php-ldap php-opcache php-apcu php-memcached php-redis -y
- # 安装其他扩展
- sudo dnf install php-imagick php-swoole php-xdebug -y
复制代码
安装完成后,重启PHP-FPM:
- sudo systemctl restart php-fpm
复制代码
8. 性能优化
8.1 PHP-FPM优化
根据服务器资源调整PHP-FPM配置:
- sudo nano /etc/php-fpm.d/www.conf
复制代码
优化参数:
- pm = dynamic
- pm.max_children = 100 # 根据服务器内存调整
- pm.start_servers = 20
- pm.min_spare_servers = 10
- pm.max_spare_servers = 30
- pm.max_requests = 1000
复制代码
8.2 OPcache配置
编辑PHP配置文件以启用和优化OPcache:
- sudo nano /etc/php.d/10-opcache.ini
复制代码
推荐配置:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=2
- opcache.fast_shutdown=1
- opcache.enable_file_override=0
- opcache.validate_timestamps=1 # 开发环境设为1,生产环境设为0
复制代码
8.3 Nginx优化
编辑Nginx主配置文件进行性能优化:
- sudo nano /etc/nginx/nginx.conf
复制代码
优化参数:
- worker_processes auto;
- worker_rlimit_nofile 100000;
- events {
- worker_connections 2048;
- multi_accept on;
- use epoll;
- }
- http {
- # 基本优化
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 30;
- keepalive_requests 100000;
- reset_timedout_connection on;
- client_body_timeout 10;
- send_timeout 2;
-
- # Gzip压缩
- gzip on;
- gzip_vary on;
- gzip_proxied any;
- gzip_comp_level 6;
- gzip_min_length 1000;
- gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
-
- # 缓存配置
- open_file_cache max=200000 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
- }
复制代码
8.4 MySQL/MariaDB优化
编辑MySQL/MariaDB配置文件:
- sudo nano /etc/my.cnf.d/mariadb-server.cnf
复制代码
在[mariadb]部分添加优化参数:
- [mariadb]
- # 基本设置
- character-set-server = utf8mb4
- collation-server = utf8mb4_unicode_ci
- default-storage-engine = InnoDB
- # 内存优化
- innodb_buffer_pool_size = 2G # 根据服务器内存调整,通常为系统内存的50-70%
- innodb_buffer_pool_instances = 4
- innodb_log_file_size = 256M
- innodb_log_buffer_size = 16M
- innodb_flush_log_at_trx_commit = 2
- innodb_flush_method = O_DIRECT
- innodb_file_per_table = 1
- # 连接优化
- max_connections = 200
- thread_cache_size = 32
- table_open_cache = 2000
- table_definition_cache = 2000
- # 查询缓存
- query_cache_type = 1
- query_cache_size = 128M
- query_cache_limit = 2M
- # 其他优化
- tmp_table_size = 64M
- max_heap_table_size = 64M
- sort_buffer_size = 4M
- read_buffer_size = 2M
- read_rnd_buffer_size = 4M
- join_buffer_size = 4M
复制代码
重启MariaDB使配置生效:
- sudo systemctl restart mariadb
复制代码
9. 安全配置
9.1 配置SSL/TLS
安装Let’s Encrypt证书:
- # 安装Certbot
- sudo dnf install certbot python3-certbot-nginx -y
- # 获取并安装证书
- sudo certbot --nginx -d example.com -d www.example.com
- # 设置自动续期
- sudo echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
复制代码
9.2 配置PHP安全设置
编辑PHP配置文件增强安全性:
安全配置:
- # 禁用危险函数
- disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
- # 隐藏PHP版本
- expose_php = Off
- # 限制文件上传
- file_uploads = On
- upload_tmp_dir = /var/www/tmp
- upload_max_filesize = 10M
- max_file_uploads = 20
- # 会话安全
- session.cookie_httponly = 1
- session.use_only_cookies = 1
- session.cookie_secure = 1 # 仅HTTPS
- session.cookie_samesite = Strict
- # 其他安全设置
- allow_url_fopen = Off
- allow_url_include = Off
- sql.safe_mode = On
- magic_quotes_gpc = Off
- register_globals = Off
复制代码
9.3 配置Web服务器安全
在站点配置中添加安全相关设置:
- server {
- # 禁止访问隐藏文件
- location ~ /\. {
- deny all;
- access_log off;
- log_not_found off;
- }
- # 禁止访问备份文件
- location ~ ~$ {
- deny all;
- access_log off;
- log_not_found off;
- }
- # 防止点击劫持
- add_header X-Frame-Options "SAMEORIGIN";
- # 防止MIME类型混淆
- add_header X-Content-Type-Options "nosniff";
- # XSS保护
- add_header X-XSS-Protection "1; mode=block";
- # 内容安全策略
- add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self' https: data:;";
- # 禁止服务器信息泄露
- server_tokens off;
- # 限制请求方法
- if ($request_method !~ ^(GET|HEAD|POST)$ ) {
- return 405;
- }
- # 限制请求大小
- client_max_body_size 10M;
- }
复制代码
编辑Apache配置文件增强安全性:
- sudo nano /etc/httpd/conf/httpd.conf
复制代码
安全配置:
- # 禁用服务器信息泄露
- ServerTokens Prod
- ServerSignature Off
- # 禁用目录列表
- Options -Indexes
- # 防止点击劫持
- Header always append X-Frame-Options "SAMEORIGIN"
- # 防止MIME类型混淆
- Header always set X-Content-Type-Options "nosniff"
- # XSS保护
- Header always set X-XSS-Protection "1; mode=block"
- # 内容安全策略
- Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self' https: data:;"
- # 请求限制
- LimitRequestBody 10485760
复制代码
9.4 配置防火墙规则
增强防火墙规则以提高安全性:
- # 允许SSH连接
- sudo firewall-cmd --permanent --add-service=ssh
- # 允许HTTP和HTTPS
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- # 限制SSH连接尝试
- sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="4/m" accept'
- # 阻止可疑IP
- sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="可疑IP" drop'
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
10. 监控和日志管理
10.1 配置日志轮转
编辑Nginx日志轮转配置:
- sudo nano /etc/logrotate.d/nginx
复制代码
配置示例:
- /var/log/nginx/*.log {
- daily
- missingok
- rotate 52
- compress
- delaycompress
- notifempty
- create 0640 nginx nginx
- postrotate
- if [ -f /var/run/nginx.pid ]; then
- kill -USR1 `cat /var/run/nginx.pid`
- fi
- endscript
- }
复制代码
编辑PHP-FPM日志轮转配置:
- sudo nano /etc/logrotate.d/php-fpm
复制代码
配置示例:
- /var/log/php-fpm/*log {
- daily
- missingok
- rotate 52
- compress
- delaycompress
- notifempty
- sharedscripts
- postrotate
- /bin/systemctl reload php-fpm.service >/dev/null 2>&1 || true
- endscript
- }
复制代码
10.2 安装监控工具
安装和配置监控工具,如Netdata:
- # 安装Netdata
- sudo dnf install netdata -y
- # 启动并设置开机自启
- sudo systemctl start netdata
- sudo systemctl enable netdata
- # 配置Netdata访问控制
- sudo nano /etc/netdata/netdata.conf
复制代码
在配置文件中添加:
- [web]
- bind to = 0.0.0.0
- allow connections from = localhost IP地址
- default port = 19999
复制代码
重启Netdata:
- sudo systemctl restart netdata
复制代码
11. 常见问题解决方案
11.1 PHP文件显示为下载而不是执行
问题:访问PHP文件时,浏览器提示下载而不是执行。
解决方案:
对于Nginx:
1. 检查Nginx配置中是否正确配置了PHP处理部分:
- location ~ \.php$ {
- try_files $uri =404;
- fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
复制代码
1. 确保PHP-FPM正在运行:
- sudo systemctl status php-fpm
复制代码
1. 检查PHP-FPM套接字文件是否存在:
- ls -la /var/run/php-fpm/php-fpm.sock
复制代码
1. 如果不存在,重启PHP-FPM:
- sudo systemctl restart php-fpm
复制代码
对于Apache:
1. 确保已安装PHP模块:
- sudo dnf install php libapache2-mod-php -y
复制代码
1. 检查Apache配置中是否正确加载了PHP模块:
- LoadModule php_module modules/libphp.so
- AddHandler php-script .php
- IncludeOptional conf.d/*.conf
复制代码
1. 重启Apache:
- sudo systemctl restart httpd
复制代码
11.2 上传文件大小限制问题
问题:无法上传大文件,提示文件大小超过限制。
解决方案:
1. 编辑PHP配置文件:
1. 修改以下参数:
- upload_max_filesize = 64M
- post_max_size = 64M
- memory_limit = 256M
- max_execution_time = 300
- max_input_time = 300
复制代码
1. 如果使用Nginx,还需要编辑Nginx配置:
- sudo nano /etc/nginx/nginx.conf
复制代码
在http部分添加:
- client_max_body_size 64M;
复制代码
1. 重启PHP-FPM和Nginx:
- sudo systemctl restart php-fpm
- sudo systemctl restart nginx
复制代码
11.3 数据库连接问题
问题:PHP无法连接到MySQL/MariaDB数据库。
解决方案:
1. 检查数据库服务是否正在运行:
- sudo systemctl status mariadb
复制代码
1. 如果未运行,启动数据库服务:
- sudo systemctl start mariadb
复制代码
1. 检查数据库连接参数是否正确:
- <?php
- $servername = "localhost";
- $username = "your_username";
- $password = "your_password";
- $dbname = "your_database";
- // 创建连接
- $conn = new mysqli($servername, $username, $password, $dbname);
- // 检查连接
- if ($conn->connect_error) {
- die("连接失败: " . $conn->connect_error);
- }
- echo "连接成功!";
- $conn->close();
- ?>
复制代码
1. 检查数据库用户权限:
- mysql -u root -p
- GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'localhost';
- FLUSH PRIVILEGES;
- EXIT;
复制代码
1. 检查防火墙是否允许数据库连接:
- sudo firewall-cmd --list-all
复制代码
如果需要远程连接,添加规则:
- sudo firewall-cmd --permanent --add-service=mysql
- sudo firewall-cmd --reload
复制代码
11.4 权限问题
问题:网站文件权限不正确,导致无法写入或执行。
解决方案:
1. 设置正确的文件所有者和权限:
- # 对于Nginx
- sudo chown -R nginx:nginx /var/www/html
- # 对于Apache
- sudo chown -R apache:apache /var/www/html
- # 设置目录权限为755,文件权限为644
- sudo find /var/www/html -type d -exec chmod 755 {} \;
- sudo find /var/www/html -type f -exec chmod 644 {} \;
- # 如果需要写入权限,设置特定目录权限为775
- sudo chmod 775 /var/www/html/uploads
- sudo chmod 775 /var/www/html/cache
复制代码
1. 检查SELinux是否阻止访问:
- # 检查SELinux状态
- getenforce
- # 如果是Enforcing,检查日志
- sudo grep AVC /var/log/audit/audit.log
- # 临时设置SELinux为Permissive模式
- sudo setenforce 0
复制代码
11.5 PHP扩展缺失问题
问题:应用程序提示缺少必要的PHP扩展。
解决方案:
1. 查看已安装的PHP扩展:
1. 安装缺失的扩展:
- # 例如安装Redis扩展
- sudo dnf install php-redis -y
- # 例如安装Imagick扩展
- sudo dnf install php-imagick -y
复制代码
1. 如果扩展不在默认仓库中,可以使用PECL安装:
- # 安装PECL
- sudo dnf install php-pear php-devel -y
- # 安装扩展
- sudo pecl install 扩展名
- # 添加扩展到PHP配置
- echo "extension=扩展名.so" | sudo tee /etc/php.d/扩展名.ini
复制代码
1. 重启PHP-FPM:
- sudo systemctl restart php-fpm
复制代码
11.6 性能问题
问题:网站响应缓慢,服务器负载高。
解决方案:
1. 检查服务器资源使用情况:
- # 查看CPU和内存使用
- top
- htop
- # 查看磁盘使用
- df -h
- # 查看磁盘I/O
- iostat
复制代码
1. 优化PHP-FPM配置:
- sudo nano /etc/php-fpm.d/www.conf
复制代码
调整以下参数:
- pm = dynamic
- pm.max_children = 100
- pm.start_servers = 20
- pm.min_spare_servers = 10
- pm.max_spare_servers = 30
- pm.max_requests = 1000
复制代码
1. 启用OPcache:
- sudo nano /etc/php.d/10-opcache.ini
复制代码
确保以下参数已设置:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
复制代码
1. 优化数据库配置:
- sudo nano /etc/my.cnf.d/mariadb-server.cnf
复制代码
调整以下参数:
- innodb_buffer_pool_size = 2G
- innodb_log_file_size = 256M
- query_cache_size = 128M
- max_connections = 200
复制代码
1. 使用缓存系统:
- # 安装Redis
- sudo dnf install redis -y
- sudo systemctl start redis
- sudo systemctl enable redis
- # 安装PHP Redis扩展
- sudo dnf install php-redis -y
- sudo systemctl restart php-fpm
复制代码
1. 实施前端优化:
• 启用浏览器缓存
• 压缩CSS和JavaScript文件
• 使用CDN分发静态资源
• 优化图片大小和格式
12. 总结
本文详细介绍了在Rocky Linux服务器上完整部署PHP运行环境的全过程,从基础系统配置到性能优化,并提供了常见问题的解决方案。通过遵循本指南,您可以建立一个安全、高效、稳定的PHP运行环境,为您的Web应用程序提供坚实的基础。
在实际部署过程中,请根据您的具体需求和应用特点进行适当调整,并定期更新和维护系统以确保安全性和性能。 |
|