凌峰创科服务平台

Linux web服务器配置文件有哪些关键配置项?

下面我将详细分解最常见的 Web 服务器(Nginx 和 Apache)的核心配置文件,并解释它们的作用和结构。

Linux web服务器配置文件有哪些关键配置项?-图1
(图片来源网络,侵删)

核心概念:配置文件的位置

在开始之前,了解配置文件通常存放在哪里非常重要,主要有两种包管理方式:

  1. 基于 Debian/Ubuntu 的系统 (使用 apt):

    • 主配置文件目录: /etc/nginx/ (Nginx) 或 /etc/apache2/ (Apache)
    • 网站配置文件目录: /etc/nginx/sites-available//etc/nginx/sites-enabled/ (Nginx) 或 /etc/apache2/sites-available//etc/apache2/sites-enabled/ (Apache)
    • 启用/禁用网站:通过在 sites-enabled 目录中创建指向 sites-available 中配置文件的软链接来实现。
  2. 基于 CentOS/RHEL 的系统 (使用 yumdnf):

    • 主配置文件目录: /etc/nginx/ (Nginx) 或 /etc/httpd/conf/ (Apache)
    • 网站配置文件目录: /etc/nginx/conf.d/ (Nginx) 或 /etc/httpd/conf.d/ (Apache)
    • 每个网站一个 .conf 文件,直接放在 conf.d 目录下即可生效。

Nginx 配置文件详解

Nginx 的配置文件结构清晰,由多个层级组成:main (主) -> events -> http -> server -> location

Linux web服务器配置文件有哪些关键配置项?-图2
(图片来源网络,侵删)

主配置文件:/etc/nginx/nginx.conf

这是 Nginx 的全局配置文件,它包含了影响整个服务器的设置。

# 运行用户和组,通常为 www-data 或 nginx
user www-data;
# worker 进程数,通常设置为 CPU 核心数
worker_processes auto;
# 错误日志路径和级别
error_log /var/log/nginx/error.log warn;
# 主进程 ID 存放文件
pid /var/run/nginx.pid;
# events 块:定义与网络连接相关的设置
events {
    # 每个worker进程能处理的最大连接数
    worker_connections 1024;
    # 使用 epoll 模型,提高 Linux 下性能
    use epoll;
}
# http 块:包含所有与 HTTP 相关的配置,是配置的核心
http {
    # include 引入其他配置文件,如 MIME 类型定义
    include /etc/nginx/mime.types;
    # 默认 MIME 类型
    default_type application/octet-stream;
    # 日志格式定义,可以在 server 块中引用
    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; # 禁用 Nagle 算法,减少延迟
    keepalive_timeout 65; # 客户端保持连接的超时时间
    types_hash_max_size 2048; # MIME 类型哈希表大小
    # 引入其他配置文件,这是模块化配置的关键!
    # 网站的具体配置会放在单独的文件中,然后在这里引入
    include /etc/nginx/conf.d/*.conf; # CentOS/RHEL
    include /etc/nginx/sites-enabled/*; # Debian/Ubuntu
    # 一个 server 块的示例,通常不放在主配置文件中
    # server {
    #     listen 80;
    #     server_name localhost;
    #     root /usr/share/nginx/html;
    #     index index.html;
    #
    #     location / {
    #         try_files $uri $uri/ =404;
    #     }
    # }
}

网站配置文件 (以 Debian/Ubuntu 为例)

/etc/nginx/sites-available/ 目录下,你会为每个网站创建一个配置文件,my_website.conf

# 定义一个虚拟主机,处理特定域名的请求
server {
    # 监听 80 端口
    listen 80;
    # 监听的域名,可以有多个,用空格隔开
    server_name example.com www.example.com;
    # 网站根目录
    root /var/www/my_website;
    # 默认首页文件
    index index.php index.html index.htm;
    # 访问日志
    access_log /var/log/nginx/my_website.access.log;
    error_log /var/log/nginx/my_website.error.log;
    # location 块:根据 URI 请求路径进行匹配
    location / {
        # try_files 尝试按顺序查找文件或目录,如果都找不到,返回 404
        try_files $uri $uri/ /index.php?$query_string;
    }
    # 处理静态文件 (CSS, JS, 图片等)
    location ~* \.(css|js|ico|png|jpg|jpeg|gif|svg|webp)$ {
        # 缓存 30 天
        expires 30d;
        # 关闭访问日志,减少 I/O
        access_log off;
    }
    # 处理 PHP 请求
    location ~ \.php$ {
        # 将 PHP 请求转发给 PHP-FPM 处理
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 或 127.0.0.1:9000
        fastcgi_index index.php;
        # 包含 FastCGI 的通用参数
        include fastcgi_params;
        # 设置传递给 PHP-FPM 的 SCRIPT_FILENAME 变量
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    # 禁止访问隐藏文件,如 .htaccess
    location ~ /\.ht {
        deny all;
    }
}

配置完成后,需要创建软链接到 sites-enabled 目录,并测试配置并重载 Nginx:

sudo ln -s /etc/nginx/sites-available/my_website.conf /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置文件语法
sudo systemctl reload nginx # 重载配置,不中断连接

Apache 配置文件详解

Apache 的配置文件结构相对传统,但也很灵活,主配置文件是 httpd.conf,虚拟主机配置可以在主文件中,也可以在独立的文件中。

Linux web服务器配置文件有哪些关键配置项?-图3
(图片来源网络,侵删)

主配置文件:/etc/apache2/httpd.conf (Debian/Ubuntu) 或 /etc/httpd/conf/httpd.conf (CentOS/RHEL)

# ServerRoot 是 Apache 安装和配置文件的根目录
ServerRoot "/etc/apache2"
# 监听的端口和 IP 地址
Listen 80
# ServerAdmin 管理员邮箱,会显示在错误页面中
ServerAdmin webmaster@example.com
# ServerName 定义服务器的主机名和端口
# 如果没有 DNS 解析,可以先用 localhost
ServerName localhost:80
# DocumentRoot 是网站文件的根目录
DocumentRoot "/var/www/html"
# <Directory> 块:为指定目录设置权限和选项
<Directory "/var/www/html">
    # 允许覆盖 .htaccess 文件中的指令
    AllowOverride All
    # 控制谁能访问该目录
    Require all granted
</Directory>
# ErrorLog 和 LogLevel 定义错误日志的路径和详细程度
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
# CustomLog 定义访问日志的格式和路径
CustomLog ${APACHE_LOG_DIR}/access.log combined
# 引入模块配置文件
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
# 引入虚拟主机配置文件
# 这是 Debian/Ubuntu 的方式
IncludeOptional sites-enabled/*.conf
# 这是 CentOS/RHEL 的方式,通常直接在 conf.d 目录下创建 .conf 文件
# IncludeOptional conf.d/*.conf

网站配置文件 (虚拟主机)

虚拟主机允许在同一台服务器上托管多个网站,通常在 /etc/apache2/sites-available/ (Debian/Ubuntu) 或 /etc/httpd/conf.d/ (CentOS/RHEL) 中创建。

基于名称的虚拟主机 (最常见):

# 在 /etc/apache2/sites-available/ 目录下创建 my_website.conf 文件
<VirtualHost *:80>
    # ServerName 是必须的,用于匹配请求的域名
    ServerName example.com
    ServerAlias www.example.com # 其他域名别名
    # DocumentRoot 指定该网站的根目录
    DocumentRoot /var/www/my_website
    # 错误日志和访问日志
    ErrorLog ${APACHE_LOG_DIR}/my_website_error.log
    CustomLog ${APACHE_LOG_DIR}/my_website_access.log combined
    # 为特定目录设置更详细的选项
    <Directory /var/www/my_website>
        # 允许使用 .htaccess
        AllowOverride All
        # 确保有执行权限 (对于 PHP 文件)
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
</VirtualHost>

配置完成后,在 Debian/Ubuntu 系统上需要启用虚拟主机:

sudo a2ensite my_website.conf # 启用站点
sudo a2dissite 000-default.conf # 可选:禁用默认站点
sudo apache2ctl configtest # 测试配置
sudo systemctl reload apache2 # 重载 Apache

其他重要配置文件

除了 Web 服务器本身,一个完整的 Web 应用环境还需要其他组件的配置。

PHP 配置文件

PHP 的配置文件通常是 php.ini,它的位置可能因安装方式而异:

  • 命令查找: php --ini
  • 常见位置: /etc/php/8.1/cli/php.ini (命令行) 和 /etc/php/8.1/fpm/php.ini (PHP-FPM)

重要配置项:

  • upload_max_filesize = 32M: 上传文件的最大大小。
  • post_max_size = 33M: POST 请求的最大大小,通常要比 upload_max_filesize 大。
  • memory_limit = 128M: PHP 脚本可使用的最大内存。
  • max_execution_time = 30: PHP 脚本最大执行时间。
  • date.timezone = "Asia/Shanghai": 设置时区。

数据库配置文件

  • MySQL/MariaDB: 主配置文件是 my.cnfmy.ini
    • 常见位置: /etc/my.cnf, /etc/mysql/my.cnf, /etc/my.cnf.d/server.cnf
    • 重要配置项:
      • [mysqld] 部分:
        • port = 3306: 监听端口。
        • bind-address = 127.0.0.1: 监听地址,设为 0.0.0 则允许外部访问(不安全)。
        • max_connections = 151: 最大连接数。
        • innodb_buffer_pool_size: InnoDB 存储引擎的缓冲池大小,对性能至关重要。

安全与性能优化建议

  1. 安全:

    • 运行用户: 确保 Web 服务器(Nginx/Apache)和 PHP-FPM 以非 root 用户(如 www-data, nginx)运行。
    • 文件权限: Web 服务器的用户应该对网站目录有读取和执行权限,但对配置文件(如 wp-config.php)没有写权限。
    • 禁用不必要的模块: 移除不使用的模块,减少攻击面。
    • 使用 HTTPS: 配置 SSL/TLS 证书(如 Let's Encrypt),强制所有流量走 HTTPS。
    • 防火墙: 使用 ufw (Uncomplicated Firewall) 或 iptables 只开放必要的端口(如 80, 443, 22 for SSH)。
  2. 性能:

    • 启用缓存: 使用 Nginx 的 proxy_cache 或 Apache 的 mod_cache 缓存动态内容。
    • 启用 Gzip/Brotli 压缩: 在 Nginx 或 Apache 中配置,压缩传输文本内容。
    • 优化静态文件: 设置合适的 expires 头,让浏览器缓存静态资源。
    • 优化 PHP-FPM: 调整 pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers 等参数,以适应你的服务器负载。
    • 使用 CDN: 将静态资源托管到 CDN,减轻服务器压力。

希望这份详细的指南能帮助你理解和管理 Linux Web 服务器的配置文件!

分享:
扫描分享到社交APP
上一篇
下一篇