首页 领读 A-AA+ 发书评 收藏 书签 朗读 手机

             

B. 配置文件模板

现代服务器架构实战:部署、性能、扩展与安全 by 创客秀

2025-11-10 13:10

B.1 Nginx 配置模板

文件:/etc/nginx/nginx.conf 或 /etc/nginx/sites-available/your-site

nginx

复制下载

# 运行Nginx的用户和组user nginx;# Worker进程数,通常设置为CPU核心数worker_processes auto;# 错误日志路径和级别error_log /var/log/nginx/error.log warn;# PID文件位置pid /var/run/nginx.pid;events {
    # 每个worker进程的最大连接数
    worker_connections 1024;
    
    # 使用高效的事件驱动模型(Linux下推荐epoll)
    use epoll;
    
    # 开启多连接接受
    multi_accept on;}http {
    # 包含MIME类型定义
    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;

    # 性能优化参数
    sendfile on;           # 启用高效文件传输
    tcp_nopush on;         # 在sendfile模式下,等待数据包充满再发送
    tcp_nodelay on;        # 禁用Nagle算法
    keepalive_timeout 65;  # 保持连接超时时间
    types_hash_max_size 2048;

    # Gzip压缩配置
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;  # 小于此值不压缩
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;

    # 上游服务器定义(用于负载均衡)
    upstream backend_servers {
        # 负载均衡算法,可选:ip_hash, least_conn, hash
        least_conn;
        
        server 192.168.1.101:8080 weight=3 max_fails=3 fail_timeout=30s;
        server 192.168.1.102:8080 weight=2 max_fails=3 fail_timeout=30s;
        server 192.168.1.103:8080 weight=1 max_fails=3 fail_timeout=30s;
        
        # 可选的健康检查
        # check interval=3000 rise=2 fall=3 timeout=1000 type=http;
    }

    # HTTP虚拟主机配置(强制跳转HTTPS)
    server {
        listen 80;
        server_name example.com www.example.com;
        
        # HTTP强制跳转HTTPS
        return 301 https://$server_name$request_uri;
    }

    # HTTPS虚拟主机配置
    server {
        listen 443 ssl http2;
        server_name example.com www.example.com;

        # SSL证书配置
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        
        # SSL安全配置
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:!aNULL:!MD5:!RC4;
        ssl_prefer_server_ciphers off;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        # 根目录和默认文件
        root /var/www/html;
        index index.html index.htm;

        # 静态资源服务配置
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
            access_log off;
        }

        # 反向代理到应用服务器
        location /api/ {
            proxy_pass http://backend_servers;
            
            # 传递必要的头部信息
            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 X-Forwarded-Proto $scheme;
            
            # 超时设置
            proxy_connect_timeout 30s;
            proxy_send_timeout 30s;
            proxy_read_timeout 30s;
        }

        # PHP-FPM配置
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        # 安全头设置
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    }}

B.2 MySQL 配置文件模板

文件:/etc/mysql/my.cnf 或 /etc/my.cnf

ini

复制下载

[mysqld]# ===== 基础设置 =====# 数据目录datadir = /var/lib/mysqlsocket = /var/lib/mysql/mysql.sock# 禁止符号链接以防止安全风险symbolic-links = 0# ===== 网络与连接 =====# 绑定地址,生产环境建议绑定内网IPbind-address = 127.0.0.1port = 3306# 连接设置max_connections = 200max_connect_errors = 10000back_log = 300# ===== 字符集设置 =====character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci# ===== 存储引擎设置 =====default-storage-engine = InnoDB# ===== InnoDB 配置 =====# InnoDB缓冲池大小,建议为系统内存的50%-70%innodb_buffer_pool_size = 1G# InnoDB日志文件大小innodb_log_file_size = 256Minnodb_log_buffer_size = 16M# InnoDB刷新日志策略innodb_flush_log_at_trx_commit = 1innodb_flush_method = O_DIRECT# InnoDB锁等待超时innodb_lock_wait_timeout = 50# ===== 查询缓存(MySQL 5.7中建议关闭,8.0中已移除) =====query_cache_type = 0query_cache_size = 0# ===== 二进制日志(用于主从复制) =====server-id = 1log_bin = /var/log/mysql/mysql-bin.logexpire_logs_days = 7max_binlog_size = 100Mbinlog_format = row# ===== 慢查询日志 =====slow_query_log = 1slow_query_log_file = /var/log/mysql/mysql-slow.loglong_query_time = 2log_queries_not_using_indexes = 0# ===== 其他优化 =====tmp_table_size = 64Mmax_heap_table_size = 64Mthread_cache_size = 16table_open_cache = 2000[mysql]default-character-set = utf8mb4[client]default-character-set = utf8mb4socket = /var/lib/mysql/mysql.sock

B.3 Redis 配置文件模板

文件:/etc/redis/redis.conf

ini

复制下载

# 基础配置bind 127.0.0.1  # 生产环境建议绑定内网IP
port 6379# 守护进程模式daemonize yes
pidfile /var/run/redis/redis-server.pid# 日志配置loglevel notice
logfile /var/log/redis/redis-server.log# 数据库数量databases 16# 持久化配置# RDB持久化save 900 1      # 900秒内至少有1个key被改变
save 300 10     # 300秒内至少有10个key被改变  
save 60 10000   # 60秒内至少有10000个key被改变

rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis# AOF持久化appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec  # 每秒同步,兼顾性能和数据安全# AOF重写配置auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb# 内存管理maxmemory 2gb
maxmemory-policy allkeys-lru  # 内存满时的淘汰策略# 安全配置requirepass your-strong-redis-password-here  # 设置访问密码# 重命名危险命令(可选但推荐)rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""# 慢查询日志slowlog-log-slower-than 10000  # 超过10毫秒的查询
slowlog-max-len 128# 客户端连接配置timeout 0  # 客户端空闲N秒后关闭连接,0表示禁用
tcp-keepalive 300# 监控配置# monitor-threshold 100

B.4 Systemd 服务文件模板

文件:/etc/systemd/system/your-app.service

ini

复制下载

[Unit]# 服务描述Description=Your Application ServiceDocumentation=https://your-app-docs.com# 在network.target之后启动,如果需要网络的话After=network.target# 如果依赖其他服务,可以在这里指定# After=mysql.service redis.service[Service]# 服务类型Type=simple# 启动服务的用户和组User=appuserGroup=appgroup# 工作目录WorkingDirectory=/opt/your-app# 启动命令ExecStart=/usr/bin/java -jar /opt/your-app/your-app.jar# 或者对于其他应用:# ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 wsgi:app# ExecStart=/usr/bin/node /opt/your-app/app.js# 环境变量Environment=NODE_ENV=productionEnvironment=DB_HOST=localhostEnvironment=DB_PORT=3306# 重启策略Restart=alwaysRestartSec=10# 优雅停止超时时间TimeoutStopSec=30# 信号处理KillSignal=SIGTERM# 标准输出和错误输出StandardOutput=journalStandardError=journal# 安全设置NoNewPrivileges=yesPrivateTmp=yesProtectSystem=strictProtectHome=yesReadWritePaths=/opt/your-app/logs /opt/your-app/data[Install]# 在什么target下启用WantedBy=multi-user.target

B.5 Docker Compose 模板

文件:docker-compose.yml

yaml

复制下载

version: '3.8'services:
  # Web应用服务
  web:
    build: 
      context: .      dockerfile: Dockerfile    image: your-registry/your-app:latest    container_name: your-app-web    restart: unless-stopped    ports:
      - "80:8000"
    environment:
      - NODE_ENV=production      - DATABASE_URL=postgresql://user:pass@db:5432/yourdb      - REDIS_URL=redis://redis:6379/0    depends_on:
      - db      - redis    volumes:
      - ./logs:/app/logs    networks:
      - app-network  # 数据库服务
  db:
    image: postgres:13
    container_name: your-app-db    restart: unless-stopped    environment:
      POSTGRES_DB: yourdb      POSTGRES_USER: user      POSTGRES_PASSWORD: your-strong-db-password    volumes:
      - db_data:/var/lib/postgresql/data      - ./backups:/backups    networks:
      - app-network  # Redis缓存服务
  redis:
    image: redis:6-alpine    container_name: your-app-redis    restart: unless-stopped    command: redis-server --requirepass your-strong-redis-password    volumes:
      - redis_data:/data    networks:
      - app-network  # Nginx反向代理
  nginx:
    image: nginx:alpine    container_name: your-app-nginx    restart: unless-stopped    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro      - ./ssl:/etc/nginx/ssl:ro    depends_on:
      - web    networks:
      - app-network# 数据卷定义volumes:
  db_data:
  redis_data:# 网络定义networks:
  app-network:
    driver: bridge

B.6 内核优化参数模板

文件:/etc/sysctl.d/99-custom-optimizations.conf

bash

复制下载

# ===== 网络优化 =====# 扩大本地端口范围net.ipv4.ip_local_port_range = 1024 65535# 启用TIME-WAIT重用和快速回收net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30# 增大连接队列net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 65535# TCP缓冲区大小net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 16384 16777216# 网络设备积压队列net.core.netdev_max_backlog = 30000# ===== 内存优化 =====# 降低Swappiness倾向vm.swappiness = 10# 脏页回写策略vm.dirty_background_ratio = 5vm.dirty_ratio = 10# 减少VFS缓存压力vm.vfs_cache_pressure = 50# ===== 文件系统优化 =====# 增加文件描述符限制fs.file-max = 100000# 提高inode缓存大小vm.vfs_cache_pressure = 50

使用说明

  1. 这些模板基于通用最佳实践,实际使用时请根据您的具体硬件配置和业务需求进行调整。

  2. 所有密码和敏感信息应使用环境变量或密钥管理服务,避免硬编码在配置文件中。

  3. 修改配置文件前请务必备份原始文件。

  4. 修改系统级配置(如内核参数)后,需要重新加载或重启相应服务才能生效。


[升级VIP更划算]
当他人从你分享的链接访问本页面时,每一个访问者的点击,你将获得[1经验] 的奖励,一个IP计算一次.
上一章

热门书评

返回顶部