1. 首页 > Linux教程 > 正文

Linux教程FG522-Linux高性能Web服务器优化

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档介绍Li

风哥提示:

nux高性能Web服务器优化技术和实战应用。

Part01-Nginx性能优化

1.1 Nginx核心优化

# 配置Nginx性能参数
[root@fgedu-nginx ~]# cat > /etc/nginx/nginx.conf << 'EOF' user nginx; worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { use epoll; worker_connections 65535; multi_accept on; accept_mutex on; accept_mutex_delay 500ms; } http { include /etc/nginx/mime.types; default_type application/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" ' 'rt=$request_time uct="$upstream_connect_time" ' 'uht="$upstream_header_time" urt="$upstream_response_time"'; access_log /var/log/nginx/access.log main buffer=32k flush=5s; # 性能优化 sendfile on; tcp_nopush on; tcp_nodelay on; # 连接优化 keepalive_timeout 65; keepalive_requests 10000; reset_timedout_connection on; # 缓冲区优化 client_body_buffer_size 128k; client_max_body_size 50m; large_client_header_buffers 4 16k; output_buffers 1 32k;更多视频教程www.fgedu.net.cn postpone_output 1460; # 文件缓存 open_file_cache max=65535 inactive=60s; open_file_cache_valid 90s; open_file_cache_min_uses 2; open_file_cache_errors on; # 压缩配置 gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/x-font-ttf font/opentype image/svg+xml; # 上游服务器 upstream backend { least_conn; server 192.168.1.20:8080 weight=5 max_fails=3 fail_timeout=30s; server 192.168.1.21:8080 weight=5 max_fails=3 fail_timeout=30s; server 192.168.1.22:8080 weight=5 max_fails=3 fail_timeout=30s; keepalive 100; } include /etc/nginx/conf.d/*.conf; } EOF # 配置虚拟主机 [root@fgedu-nginx ~]# cat > /etc/nginx/conf.d/fgedu.conf << 'EOF' server { listen 80 backlog=65535; server_name www.fgedu.net.cn; # SSL配置 listen 443 ssl http2 backlog=65535; ssl_certificate /etc/nginx/ssl/fgedu.crt; ssl_certificate_key /etc/nginx/ssl/fgedu.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:100m; ssl_session_timeout 1d; ssl_session_tickets off; # 安全头 add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 静态文件缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; proxy_cache static_cache; proxy_cache_valid 200 30d; } # 动态请求代理 location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection ""; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffering on; proxy_buffer_size 4k; from PG视频:www.itpux.com proxy_buffers 8 32k; proxy_busy_buffers_size 64k; } # 健康检查 location /health { access_log off; return 200 "OK\n"; } } EOF # 测试配置 [root@fgedu-nginx ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@fgedu-nginx ~]# systemctl reload nginx

Part02-PHP-FPM优化

2.1 PHP-FPM性能配置

# 配置PHP-FPM
[root@fgedu-php ~]# cat > /etc/php-fpm.d/www.conf << 'EOF' [www] user = nginx group = nginx listen = /run/php-fpm/www.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 listen.backlog = 65535 # 进程管理 pm = dynamic pm.max_children = 200 pm.start_servers = 20 pm.min_spare_servers = 10 pm.max_spare_servers = 50 pm.max_requests = 1000 # 状态监控 pm.status_path = /php-status ping.path = /ping ping.response = pong # 慢日志 slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 5s request_terminate_timeout = 60s # 环境变量 clear_env = no # 性能优化 catch_workers_output = yes decorate_workers_output = no EOF # 配置OPcache [root@fgedu-php ~]# cat > /etc/php.d/10-opcache.ini << 'EOF' zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.max_wasted_percentage=10 opcache.validate_timestamps=0 opcache.revalidate_freq=0 opcache.fast_shutdown=1 opcache.save_comments=1 opcache.enable_file_override=1 EOF # 重启PHP-FPM [root@fgedu-php ~]# systemctl restart php-fpm # 测试PHP状态 [root@fgedu-php ~]# curl http://localhost/php-status pool: www process manager: dynamic start time: 04/Apr/2026:15:00:00 +0800 start since: 3600 accepted conn: 123456 listen queue: 0 max listen queue: 10 listen queue len: 65535 idle processes: 15 active processes: 5 total processes: 20 max active processes: 50 max children reached: 0 slow requests: 12

Part03-Redis缓存优化

3.1 Redis性能配置

# 配置Redis
[root@fgedu-redis ~]# cat > /etc/redis/redis.conf << 'EOF' # 网络配置 bind 192.168.1.50 port 6379 tcp-backlog 65535 timeout 0 tcp-keepalive 300 # 内存配置 maxmemory 8gb maxmemory-policy allkeys-lru # 持久化配置 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis # AOF配置 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 性能优化 hz 100 dynamic-hz yes latency-monitor-threshold 100 slowlog-log-slower-than 10000 slowlog-max-len 128 # 客户端配置 maxclients 10000 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 安全配置 requirepass Redis@123 rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "" rename-command KEYS "" # 日志配置 loglevel notice logfile /var/log/redis/redis.log EOF # 启动Redis [root@fgedu-redis ~]# systemctl restart redis # 测试Redis性能 [root@fgedu-redis ~]# redis-benchmark -h 192.168.1.50 -p 6379 -a Redis@123 -t set,get -n 100000 -c 100 ====== SET ====== 100000 requests completed in 1.23 seconds 100 parallel clients 3 bytes payload keep alive: 1 host configuration "save": 900 1 300 10 60 10000 multi-thread: no Latency by percentile dist学习交流加群风哥微信: itpux-comribution: 0.000% <= 0.095 milliseconds 50.000% <= 0.287 milliseconds 75.000% <= 0.375 milliseconds 90.000% <= 0.495 milliseconds 99.000% <= 0.935 milliseconds 99.900% <= 1.951 milliseconds 99.990% <= 3.359 milliseconds 99.999% <= 5.311 milliseconds 100.000% <= 6.047 milliseconds Summary: throughput summary: 81300.81 requests per second latency summary (msec): avg min p50 p95 p99 max 0.296 0.072 0.287 0.543 0.935 6.047

Part04-MySQL数据库优化

4.1 MySQL性能调优

# 配置MySQL
[root@fgedu-mysql ~]# cat > /etc/my.cnf.d/server.cnf << 'EOF' [mysqld] # 基本配置 user = mysql port = 3306 datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/run/mysqld/mysqld.pid # 字符集 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 连接配置 max_connections = 5000 max_connect_errors = 10000 wait_timeout = 600 interactive_timeout = 600 connect_timeout = 10 # 缓冲区配置 innodb_buffer_pool_size = 8G innodb_buffer_pool_instances = 8 innodb_log_buffer_size = 64M innodb_log_file_size = 1G innodb_log_files_in_group = 3 # I/O配置 innodb_flush_method = O_DIRECT innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 innodb_flush_log_at_trx_commit = 1 innodb_file_per_table = 1 # 并发配置 innodb_thread_concurrency = 0 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_lock_wait_timeout = 50 # 查询缓存(MySQL 8.0已移除) query_cache_type = 0 query_cache_size = 0 # 临时表配置 tmp_table_size = 256M max_heap_table_size = 256M # 排序配置 sort_buffer_size = 4M join_buffer_size = 4M read_buffer_size = 2M read_rnd_buffer_size = 8M # 慢查询日志 slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 log_queries_not_using_indexes = 1 # 二进制日志 log_bin = mysql-bin binlog_format = ROW expire_logs_days = 7 max_binlog_size = 500M binlog_cache_size = 128K sync_binlog = 1 # 错误日志 log_error = /var/log/mysql/error.log EOF # 重启MySQL [root@fgedu-mysql ~]# systemctl restart mysqld # 查看MySQL状态 [root@fgedu-mysql ~]# mysql -u root -p'MySQL@123' -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 50 | +-------------------+-------+ # 优化表 [root@fgedu-mysql ~]# mysqlcheck -u root -p'MySQL@123' --optimize --all-databases fgedu_db.users Table is already up to date fgedu_db.orders Table is already up to date
风哥针对Web服务器优化建议:

  • 根据业务特点调整参数
  • 启用缓存机制
  • 优化数据库查询
  • 使用CDN加速静态资源
  • 定期监控性能指标

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息