而在Linux系统上配置Nginx虚拟主机,则是实现多站点部署、资源优化和流量管理的关键步骤
本文将详细介绍如何编写和优化Linux Nginx虚拟主机配置文件,以确保你的Web服务既高效又安全
一、Nginx配置文件概述 Nginx的配置文件通常采用模块化设计,包含多个上下文(context),每个上下文定义了一组相关的配置指令
这些上下文包括: main:主上下文,包含全局配置指令
events:事件上下文,定义事件模块的配置
- http:HTTP上下文,定义HTTP模块的配置
- server:服务器上下文,定义虚拟主机的配置
- location:位置上下文,定义URL路径的配置
Nginx的配置文件通常位于`/etc/nginx/nginx.conf`(包管理器安装)或`/usr/local/nginx/conf/nginx.conf`(源码编译安装)
此外,Nginx还支持通过`include`指令包含其他配置文件,常见的配置文件目录包括`/etc/nginx/conf.d/`和`/etc/nginx/sites-enabled/`
二、配置文件的基本结构 一个典型的Nginx配置文件示例如下: user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; events { worker_connections 1024; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript application/xml; include /etc/nginx/conf.d/.conf; include /etc/nginx/sites-enabled/; server{ listen 80; server_name example.com; charset utf-8; access_log /var/log/nginx/access.log main; location/ { root /var/www/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 三、优化与配置详解 1. 全局配置(main) user:指定Nginx工作进程的用户和组
- worker_processes:指定工作进程的数量,通常设置为CPU核心数
- error_log:指定错误日志文件路径和日志级别
pid:指定PID文件路径
2. 事件配置(events) - worker_connections:指定每个工作进程的最大并发连接数
- use:指定事件模型,通常使用默认值即可,但在高性能场景下可以选用`epoll`
- multi_accept:开启支持多个连接同时建立
3. HTTP配置(http) - include:包含其他配置文件,如MIME类型定义和站点配置
- default_type:指定默认的MIME类型
- sendfile:启用sendfile系统调用,提高静态文件传输效率
- keepalive_timeout:指定长连接的超时时间
gzip:启用Gzip压缩,减少传输数据量
4. 虚拟主机配置(server) listen:指定监听的端口和IP地址
- server_name:指定虚拟主机的主机名,可以包含多个域名
charset:设置字符集
- access_log:指定访问日志文件路径和格式
root:指定虚拟主机的根目录
index:指定默认的索引文件
error_page:指定错误页面的路径
5. 位置配置(location) - location:匹配URL路径,支持多种匹配模式(如前缀匹配、正则匹配等)
root:指定请求的根目录
index:指定默认的索引文件
proxy_pass:将请求转发到后端服务器
rewrite:重写URL路径
四、基于域名的虚拟主机配置 假设我们需要为两个域名`www.kgc.com`和`www.accp.com`分别配置虚拟主机,具体步骤如下: 1.创建站点目录和文件: mkdir -p /var/www/html/kgc mkdir -p /var/www/html/accp echo this is kgc web > /var/www/html/kgc/index.html echo this is accp web > /var/www/html/accp/index.html 2.配置DNS服务: 编辑DNS服务区域配置文件,添加域名解析条目
3.编辑Nginx主配置文件: server { listen 80; server_name www.kgc.com; charset utf-8; access_log /var/log/nginx/www.kgc.com.access.log; location/ { root /var/www/html/kgc; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name www.accp.com; charset utf-8; access_log /var/log/nginx/www.accp.com.access.log; location/ { root /var/www/html/accp; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 4.检测配置并重启服务: nginx -t service nginx restart systemctl restart named 五、基于端口的虚拟主机配置 如果需要基于端口区分不同的虚拟主机,可以在`server`块中指定不同的监听端口
例如: server { listen 192.168.144.133:80; server_name www.accp.com; charset utf-8; access_log /var/log/nginx/www.accp.com.access.log; location/ { root /var/www/html/accp; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html;