【Nginx开荒攻略】第一个Nginx服务器配置:监听端口、根目录与默认首页完全指南
目录
引言
1 监听端口配置
1.1 监听端口概述
1.2 listen指令详解
1.2.1 基本语法
1.2.2 常用配置方式
1.2.3 具体配置示例
1.2.4 高级参数配置
1.3 多端口监听配置
1.3.1 同一server块监听多个端口
1.3.2 不同server块监听不同端口
1.4 监听端口最佳实践
1.4.1 安全配置建议
1.4.2 性能优化建议
1.4.3 监控与维护建议
2 根目录设置
2.1 根目录概述
2.2 root指令详解
2.2.1 基本语法
2.2.2 配置位置
2.2.3 配置示例
2.2.4 root指令工作机制
2.3 root与alias的区别
2.3.1 root指令工作机制
2.3.2 alias指令工作机制
2.3.3 对比示例
2.3.4 使用场景对比
2.4 根目录配置实践
2.4.1 目录结构设计
2.4.2 权限配置建议
2.4.3 安全配置建议
3 默认首页配置
3.1 默认首页概述
3.2 index指令详解
3.2.1 基本语法
3.2.2 配置位置
3.2.3 基本配置示例
3.2.4 高级配置示例
3.3 index指令工作机制
3.3.1 内部重定向机制
3.3.2 多文件查找顺序
3.3.3 自动索引功能
3.4 默认首页配置实践
3.4.1 安全配置建议
3.4.2 性能优化建议
3.4.3 多环境配置建议
4 完整配置示例
4.1 基础网站配置
4.2 多域名配置示例
4.3 HTTPS配置示例
6 结语
引言
Nginx作为当今最流行的Web服务器之一,以其高性能、稳定性和丰富的功能特性赢得了广大开发者和运维人员的青睐。对于刚接触Nginx的新手来说,第一个服务器的配置往往是入门的第一道门槛。本文将简单介绍Nginx服务器配置中最基础也最重要的三个部分:监听端口配置、根目录设置和默认首页配置,帮助读者从零开始构建一个功能完整的Nginx Web服务器。
1 监听端口配置
1.1 监听端口概述
- 监听端口是Nginx服务器接收客户端请求的入口点,正确配置监听端口是搭建Web服务器的第一步。Nginx通过listen指令来配置监听的地址和端口。

- 客户端发起请求:客户端浏览器向服务器发送HTTP请求
- 网络层传输:请求通过网络层传输到服务器
- 端口匹配:服务器检查请求的目标端口是否在Nginx的监听范围内
- 连接处理:如果端口匹配成功,Nginx接收并处理请求;如果匹配失败,拒绝连接
- 响应返回:Nginx处理完请求后,将响应返回给客户端
1.2 listen指令详解
listen指令是Nginx配置中最核心的指令之一,用于指定服务器监听的地址和端口。
1.2.1 基本语法
listen address:port [parameters];
参数说明:
- address:监听的IP地址,可以是IPv4或IPv6地址
- port:监听的端口号
- parameters:可选参数,用于配置监听行为
1.2.2 常用配置方式

1.2.3 具体配置示例
- 仅监听端口
# 监听所有IP的80端口
listen 80;# 监听所有IP的8080端口
listen 8080;
配置说明:
- 当只指定端口号时,Nginx会监听服务器上所有网络接口的该端口
- 如果以root用户运行,默认监听80端口;以普通用户运行,默认监听8000-8999端口范围内的随机端口
- 监听特定IP
# 监听127.0.0.1的8080端口
listen 127.0.0.1:8080;# 监听本地回环地址的80端口
listen localhost:80;
配置说明:
- 指定特定IP地址时,Nginx只监听该IP地址的指定端口
- localhost等同于127.0.0.1,用于本地访问
- 监听所有IP
# 监听所有IPv4地址的80端口
listen *:80;# 监听所有IPv4地址的8080端口
listen 0.0.0.0:8080;
配置说明:
- *或0.0.0.0表示监听所有IPv4地址
- 适用于需要通过多个IP地址访问服务的场景
- IPv6监听
# 监听所有IPv6地址的80端口
listen [::]:80;# 监听特定IPv6地址的8080端口
listen [fe80::1]:8080;
配置说明:
- IPv6地址需要用方括号[]括起来
- [::]表示监听所有IPv6地址
- 支持同时监听IPv4和IPv6地址
- SSL监听
# 监听443端口并启用SSL
listen 443 ssl;# 监听特定IP的443端口并启用SSL
listen 127.0.0.1:443 ssl;
配置说明:
- ssl参数表示该端口使用HTTPS协议
- 需要配合ssl_certificate和ssl_certificate_key指令使用
1.2.4 高级参数配置
# 配置backlog队列大小
listen 80 backlog=1024;# 设置接收缓存大小
listen 80 rcvbuf=8k;# 设置发送缓存大小
listen 80 sndbuf=8k;# 绑定特定地址对
listen 127.0.0.1:8080 bind;# 设置为默认服务器
listen 80 default_server;# 启用延迟接受
listen 80 deferred;
参数详解:
- backlog:TCP连接队列大小,表示最多可以等待处理的连接数
- rcvbuf:接收缓冲区大小,影响数据接收性能
- sndbuf:发送缓冲区大小,影响数据发送性能
- bind:绑定特定的地址-端口对,避免端口冲突
- default_server:设置为默认服务器,当没有其他服务器匹配时使用
- deferred:延迟接受连接,减少worker进程负担
1.3 多端口监听配置
1.3.1 同一server块监听多个端口
server {listen 80;listen 8080;listen 443 ssl;server_name example.com;root /var/www/html;index index.html;
}
配置说明:
- 一个server块可以监听多个端口
- 适用于需要提供多种服务的场景
- 不同端口可以使用不同的配置参数
1.3.2 不同server块监听不同端口
# HTTP服务
server {listen 80;server_name example.com;root /var/www/html;index index.html;
}# HTTPS服务
server {listen 443 ssl;server_name example.com;root /var/www/html;index index.html;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;
}# 管理后台服务
server {listen 8080;server_name admin.example.com;root /var/www/admin;index index.html;
}
配置说明:
- 不同的server块可以监听不同的端口
- 适用于需要隔离不同服务或域名的场景
- 可以针对不同端口设置不同的安全策略
1.4 监听端口最佳实践
1.4.1 安全配置建议
# 限制访问来源
server {listen 80;server_name example.com;# 只允许特定IP访问管理端口location /admin {allow 192.168.1.0/24;deny all;root /var/www/admin;index index.html;}
}# 使用防火墙限制端口访问
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -p tcp --dport 8080 -j DROP
1.4.2 性能优化建议
# 优化TCP连接参数
server {listen 80 backlog=2048;listen 443 ssl backlog=2048;# 设置keepalive超时keepalive_timeout 75s;# 设置单连接最大请求数keepalive_requests 1000;
}
1.4.3 监控与维护建议
# 检查端口监听状态
netstat -tlnp | grep nginx# 检查端口连接数
ss -tlnp | grep nginx# 查看端口占用情况
lsof -i :80
2 根目录设置
2.1 根目录概述
根目录是Nginx服务器存放网站文件的根路径,所有客户端请求的文件都会基于这个根目录进行查找。正确配置根目录是确保网站文件能够正确访问的关键。

- 客户端请求:客户端浏览器向服务器发送文件请求
- URL解析:Nginx解析请求的URL路径
- 根目录配置:根据配置的根目录路径
- 文件路径拼接:将根目录路径与URL路径拼接成完整文件路径
- 文件检查:检查拼接后的文件路径是否存在
- 文件处理:如果文件存在,读取文件内容;如果不存在,返回404错误
- 响应返回:将处理结果返回给客户端
2.2 root指令详解
root指令用于指定Nginx服务器的根目录,是配置网站文件路径的核心指令。
2.2.1 基本语法
root path;
参数说明:
- path:根目录的文件系统路径,可以是绝对路径或相对路径
2.2.2 配置位置

配置层级说明:
- http块:在http块中设置的root对所有server块生效
- server块:在server块中设置的root对该server的所有location生效
- location块:在location块中设置的root只对该location生效,会覆盖上级配置
2.2.3 配置示例
- 全局根目录配置
http {root /var/www;server {listen 80;server_name example.com;location / {# 使用全局根目录 /var/www}}
}
配置说明:
- 在http块中设置的root对所有server块生效
- 适用于多个网站使用相同根目录结构的场景
- 虚拟主机根目录配置
server {listen 80;server_name example.com;root /var/www/example;location / {# 使用根目录 /var/www/example}
}server {listen 80;server_name blog.example.com;root /var/www/blog;location / {# 使用根目录 /var/www/blog}
}
配置说明:
- 每个server块可以设置不同的root目录
- 适用于多域名、多站点的场景
- 特定路径根目录配置
server {listen 80;server_name example.com;root /var/www/main;location /static/ {root /var/www/static;# 该location使用 /var/www/static 作为根目录}location /images/ {root /var/www/images;# 该location使用 /var/www/images 作为根目录}
}
配置说明:
- location块中的root会覆盖server块的root配置
- 适用于需要为不同路径设置不同根目录的场景
2.2.4 root指令工作机制

- 请求接收:Nginx接收到客户端的文件请求
- 配置获取:Nginx获取当前作用域的root配置
- 路径拼接:将root路径与请求URI拼接成完整文件路径
- 文件检查:检查拼接后的文件路径是否存在
- 文件读取:如果文件存在,读取文件内容
- 响应返回:将文件内容作为HTTP响应返回给客户端
2.3 root与alias的区别
root和alias都是用于指定文件路径的指令,但它们的工作机制有重要区别。
2.3.1 root指令工作机制
server {listen 80;server_name example.com;root /var/www;location /static/ {# 请求 /static/file.txt -> /var/www/static/file.txt}
}
工作机制:
- 完整路径 = root路径 + location路径 + URI路径
- location路径会被保留并追加到root路径后面
2.3.2 alias指令工作机制
server {listen 80;server_name example.com;location /static/ {alias /var/www/data/;# 请求 /static/file.txt -> /var/www/data/file.txt}
}
工作机制:
- 完整路径 = alias路径 + URI路径(去掉location匹配部分)
- location路径会被alias路径替换
2.3.3 对比示例
# root配置示例
server {listen 80;server_name example.com;root /var/www;location /static/ {# 请求 /static/css/style.css -> /var/www/static/css/style.css# 请求 /static/js/main.js -> /var/www/static/js/main.js}
}# alias配置示例
server {listen 80;server_name example.com;location /static/ {alias /var/www/data/;# 请求 /static/css/style.css -> /var/www/data/css/style.css# 请求 /static/js/main.js -> /var/www/data/js/main.js}
}
2.3.4 使用场景对比
特性 | root | alias |
路径处理 | root路径 + location路径 + URI路径 | alias路径 + URI路径(去掉location部分) |
location匹配 | 保留location路径 | 替换location路径 |
适用场景 | 目录结构保持一致 | 路径重写需求 |
结尾斜杠 | 可选 | 推荐 |
嵌套location | 支持 | 不支持 |
2.4 根目录配置实践
2.4.1 目录结构设计
/var/www/
├── html/ # 主网站文件
│ ├── index.html
│ ├── css/
│ ├── js/
│ └── images/
├── static/ # 静态资源
│ ├── css/
│ ├── js/
│ ├── images/
│ └── fonts/
├── uploads/ # 用户上传文件
│ ├── user-uploads/
│ └── temp/
└── logs/ # 日志文件├── access.log└── error.log
2.4.2 权限配置建议
# 设置正确的文件权限
# chown -R nginx:nginx /var/www
# chmod -R 755 /var/www
# chmod -R 755 /var/www/html
# chmod -R 755 /var/www/static
# chmod -R 755 /var/www/uploads
# chmod -R 644 /var/www/html/*.html
# chmod -R 644 /var/www/static/*
2.4.3 安全配置建议
server {listen 80;server_name example.com;root /var/www/html;# 禁止访问敏感文件location ~* \.(htaccess|htpasswd|ini|phps|fla|psd|log)$ {deny all;}# 限制上传目录执行权限location /uploads/ {location ~* \.php$ {deny all;}}# 设置安全头add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";
}
3 默认首页配置
3.1 默认首页概述
默认首页是指当用户访问网站根目录时,服务器自动返回的页面。Nginx通过index指令来配置默认首页文件。

- 用户访问:用户在浏览器中输入网站地址
- URL检查:检查URL是否指定了具体文件
- 默认页面处理:如果未指定文件,查找默认首页
- 配置查找:根据index指令配置的文件顺序查找
- 文件检查:按顺序检查配置的首页文件是否存在
- 结果返回:找到第一个存在的文件作为首页返回;如果都不存在,返回404错误
3.2 index指令详解
index指令用于指定默认首页文件,可以配置多个文件,按顺序查找。
3.2.1 基本语法
index file1 [file2 ...];
参数说明:
- file1, file2, ...:默认首页文件列表,按顺序查找
3.2.2 配置位置
- index指令可以在不同的配置层级中设置:

配置层级说明:
- http块:在http块中设置的index对所有server块生效
- server块:在server块中设置的index对该server的所有location生效
- location块:在location块中设置的index只对该location生效,会覆盖上级配置
3.2.3 基本配置示例
- 单个默认首页
server {listen 80;server_name example.com;root /var/www/html;index index.html;
}
配置说明:
- 只设置一个默认首页文件index.html
- 访问根目录时,优先查找index.html
- 多个默认首页
server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;
}
配置说明:
- 按顺序查找:index.php → index.html → index.htm
- 找到第一个存在的文件作为默认首页
- 不同路径的不同首页
server {listen 80;server_name example.com;root /var/www/html;location / {index index.html;}location /admin/ {index admin.php index.html;}location /blog/ {index index.php;}
}
配置说明:
- 不同路径可以配置不同的默认首页
- /路径使用index.html
- /admin/路径使用admin.php或index.html
- /blog/路径使用index.php
3.2.4 高级配置示例
- 使用变量
server {listen 80;server_name example.com;root /var/www/html;index index.$geo.html index.html;
}
配置说明:
- 使用$geo变量根据用户地理位置选择首页
- 首先查找index.US.html(如果用户来自美国)
- 如果不存在,使用index.html
- 指定绝对路径
server {listen 80;server_name example.com;root /var/www/html;index index.html /home/landing.html;
}
配置说明:
- 第一个文件使用相对路径(相对于root目录)
- 第二个文件使用绝对路径
- 先查找/var/www/html/index.html,再查找/home/landing.html
- 配置随机首页
# 需要编译时添加 --with-http_random_index_module 参数
server {listen 80;server_name example.com;root /var/www/html;location / {index index.html;# 启用随机首页random_index on;}
}
配置说明:
- 使用random_index模块随机选择首页
- 从目录中随机选择一个文件作为首页
- 需要编译时启用http_random_index_module
3.3 index指令工作机制
3.3.1 内部重定向机制

- 初始请求:客户端访问根目录/
- index查找:Nginx根据index配置查找首页文件
- 文件检查:检查配置的第一个首页文件是否存在
- 内部重定向:如果文件存在,Nginx发起内部重定向到该文件
- 文件处理:重新处理重定向后的请求,读取文件内容
- 响应返回:将文件内容作为HTTP响应返回
3.3.2 多文件查找顺序
server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;
}
查找顺序:
- 第一轮查找:检查/var/www/html/index.php
- 如果存在,返回index.php
- 如果不存在,继续查找下一个文件
- 第二轮查找:检查/var/www/html/index.html
- 如果存在,返回index.html
- 如果不存在,继续查找下一个文件
- 第三轮查找:检查/var/www/html/index.htm
- 如果存在,返回index.htm
- 如果不存在,返回404错误
3.3.3 自动索引功能
server {listen 80;server_name example.com;root /var/www/html;location /downloads/ {index index.html;autoindex on; # 启用自动索引}
}
自动索引功能说明:
- 当index指定的文件都不存在时,启用autoindex会显示目录列表
- 显示目录中的文件和子目录
- 提供文件下载功能
- 可以自定义索引页面样式
3.4 默认首页配置实践
3.4.1 安全配置建议
server {listen 80;server_name example.com;root /var/www/html;index index.php index.html;# 禁止目录列表location ~* ^/($|downloads/|uploads/) {autoindex off;}# 限制PHP文件访问location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi_params;}# 设置安全头add_header X-Content-Type-Options "nosniff";add_header X-Frame-Options "SAMEORIGIN";
}
3.4.2 性能优化建议
server {listen 80;server_name example.com;root /var/www/html;index index.html;# 启用压缩gzip on;gzip_types text/html text/css application/javascript;# 设置缓存location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}# 首页不缓存location = /index.html {add_header Cache-Control "no-cache, no-store, must-revalidate";}
}
3.4.3 多环境配置建议
# 开发环境
server {listen 8080;server_name dev.example.com;root /var/www/dev;index index.html;# 开发环境特定配置
}# 测试环境
server {listen 8081;server_name test.example.com;root /var/www/test;index index.html;# 测试环境特定配置
}# 生产环境
server {listen 80;server_name example.com;root /var/www/production;index index.html;# 生产环境特定配置
}
4 完整配置示例
4.1 基础网站配置
# 基础网站配置示例
server {# 监听配置listen 80;listen [::]:80;server_name example.com www.example.com;# 根目录配置root /var/www/html;# 默认首页配置index index.html index.htm;# 访问日志配置access_log /var/log/nginx/example.com.access.log;error_log /var/log/nginx/example.com.error.log;# 主页配置location / {try_files $uri $uri/ =404;}# 静态文件配置location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}# 压缩配置gzip on;gzip_vary on;gzip_min_length 1024;gzip_comp_level 6;gzip_types text/plain text/css application/json application/javascript;
}
4.2 多域名配置示例
# 多域名配置示例
server {# 网站A配置listen 80;server_name example.com;root /var/www/site-a;index index.html;location / {try_files $uri $uri/ =404;}
}server {# 网站B配置listen 80;server_name blog.example.com;root /var/www/site-b;index index.php;location / {try_files $uri $uri/ =404;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi_params;}
}server {# 管理后台配置listen 8080;server_name admin.example.com;root /var/www/admin;index index.html;# 访问控制allow 192.168.1.0/24;deny all;
}
4.3 HTTPS配置示例
# HTTPS配置示例
server {# HTTP重定向到HTTPSlisten 80;server_name example.com www.example.com;return 301 https://$host$request_uri;
}server {# HTTPS配置listen 443 ssl http2;server_name example.com www.example.com;root /var/www/html;index index.html;# SSL配置ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;# 安全头配置add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 主页配置location / {try_files $uri $uri/ =404;}# 静态文件配置location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}
}
6 结语
本文介绍了Nginx服务器配置的三个核心要素:监听端口配置、根目录设置和默认首页配置。通过理解这些配置的工作原理和最佳实践,我们可以构建出安全、高效、可维护的Web服务器。记住,配置Nginx不仅需要掌握语法,更需要理解其工作原理和最佳实践。在实际应用中,建议多测试、多总结,不断优化配置,以适应不同的业务需求和技术环境。