一篇文章看懂web服务
安装与配置 Nginx
一、Nginx 核心特性
高性能:事件驱动架构,支持高并发连接
模块化设计:动态加载模块(如 HTTP/2、SSL、缓存)
反向代理与负载均衡:适用于 Web 服务器、API 网关等场景
轻量级:低内存占用,适合资源受限环境
二、安装 Nginx
安装 Nginx
更新仓库元数据
sudo dnf clean all && sudo dnf makecache安装 Nginx
sudo dnf install -y nginx验证版本
nginx -v输出示例:nginx version: nginx/1.24.0
三、基础配置与启动
1. 管理服务
操作 | 命令 | 说明 |
启动服务 | sudo systemctl start nginx | 初始化 Nginx 进程vv |
设置开机自启 | sudo systemctl enable nginx | 确保系统重启后自动运行 |
查看服务状态 | sudo systemctl status nginx | 验证服务是否正常运行 |
重载配置 | sudo systemctl reload nginx | 应用配置变更无需重启服务 |
重启服务 | sudo systemctl restart nginx | 完整重启 |
2. 防火墙配置
开放 HTTP (80) 和 HTTPS (443) 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload验证端口监听
ss -tuln | grep -E '80|443'输出示例:tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
四、配置文件结构解析
1. 核心目录与文件
路径 | 用途 |
/etc/nginx/nginx.conf | 主配置文件,包含全局设置和 http 块 |
/etc/nginx/conf.d/ | 存放自定义配置文件 |
/var/log/nginx/ | 日志目录 |
/usr/share/nginx/html/ | 默认静态文件根目录 |
五、验证
1. 语法检查
sudo nginx -t预期输出:nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginx 端口管理详解
在 Nginx 中,端口配置是服务部署的核心环节,直接影响服务的可达性、安全性和性能。
一、默认端口与功能
Nginx 默认使用以下端口提供不同服务:
端口 | 协议 | 用途 | 示例场景 |
---|---|---|---|
80 | TCP/HTTP | 提供 HTTP 明文服务 | 基础网页访问、API 调用 |
443 | TCP/HTTPS | 提供 HTTPS 加密服务 | 支付接口 |
二、修改默认监听端口
通过修改 Nginx 配置文件可自定义监听端口。
1. 配置单端口监听
编辑虚拟主机配置文件
server {listen 8080; 将 HTTP 端口改为 8080server_name example.com;root /usr/share/nginx/html;index index.html;
}
三、HTTPS 与 SSL 端口配置
为启用 HTTPS,需配置 SSL 证书并指定 443 端口:
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;强制 HTTP 跳转 HTTPSif ($scheme = http) {return 301 https://$server_name$request_uri;}
}
SELinux 策略调整
若使用非标准端口(如 8080),需修改 SELinux 策略:
1. 允许 Nginx 绑定自定义端口
添加端口规则
sudo semanage port -a -t http_port_t -p tcp 8080验证已允许的端口
sudo semanage port -l | grep http_port_t输出应包含:http_port_t tcp 80, 443, 8080
端口冲突与故障排查
1. 检测端口占用
查看 80 端口占用情况
sudo ss -tuln | grep ':80'若输出非 Nginx 进程,需终止冲突服务
sudo kill <PID>
2.检查权限问题
查看 Nginx 运行用户
ps aux | grep nginx确保用户(如 nginx)有端口绑定权限
Nginx 默认发布文件和目录配置
在 Nginx 中,默认发布文件(即网站的静态资源根目录)是服务启动后对外提供内容的基础路径。
一、默认发布文件位置
根目录路径:
/usr/share/nginx/html
默认首页文件:
/usr/share/nginx/html/index.html
二、验证默认发布文件
1.访问测试:
安装 Nginx 后,访问服务器 IP 或域名(HTTP 默认端口 80),将显示 Nginx 默认欢迎页
查看默认文件内容:
cat /usr/share/nginx/html/index.html输出包含 "Welcome to nginx!" 的 HTML 内容
三、自定义默认发布文件1. 修改默认首页内容
备份原始文件
sudo cp /usr/share/nginx/html/index.html{,.bak}编辑新内容
echo "<h1>Hello, World!</h1>" | sudo tee /usr/share/nginx/html/index.html
2. 更改根目录(Document Root)
通过编辑虚拟主机配置文件
server {listen 80;server_name example.com;# 设置新的根目录root /var/www/example;index index.html index.htm;location / {try_files $uri $uri/ =404;}
}
默认发布目录是 Nginx 提供静态资源的根路径,所有客户端请求的文件均基于此目录进行解析。
一、默认发布目录结构
1. 标准路径与文件
默认根目录:
/usr/share/nginx/html
核心文件:
index.html
:默认首页文件
50x.html
:默认 50x 错误页
其他静态资源
2. 目录权限
默认权限:
drwxr-xr-x. 2 root root 4096 Feb 13 11:00 /usr/share/nginx/html
Nginx 运行用户:
默认以 nginx
用户运行,需确保该用户对目录有读取权限
二、修改默认发布目录
1. 单站点配置
编辑虚拟主机配置文件
server {listen 80;server_name example.com;修改根目录root /var/www/example;index index.html;location / {try_files $uri $uri/ =404;}
}
2. 创建并授权新目录
创建目录
sudo mkdir -p /var/www/example设置所有权
sudo chown -R nginx:nginx /var/www/example设置权限
sudo chmod -R 755 /var/www/example创建测试文件
echo "<h1>Hello from Custom Directory</h1>" | sudo tee /var/www/example/index.html
3. 验证配置
检查语法
sudo nginx -t重启服务
sudo systemctl restart nginx访问测试
curl -I http://example.com
Nginx 访问控制全解析
Nginx 提供多维度访问控制机制,可基于 IP、用户认证、地理位置等条件精细化管控请求
一、基于 IP 地址的访问控制
通过 allow
和 deny
指令限制特定 IP 或网段访问。
1.基础配置
location /admin {allow 网段; 允许内网访问allow ; 允许特定公网 IPdeny all; 拒绝其他所有请求
}
2. 全局黑名单
# /etc/nginx/conf.d/block.conf
geo $block_ip {default 0;; # 封禁 IP网段 ; # 封禁网段
}server {location / {if ($block_ip) {return 403;}# 其他配置...}
}
二、HTTP 基础认证
通过用户名和密码验证访问权限,需使用 auth_basic
模块
1. 生成密码文件
安装工具
sudo dnf install -y httpd-tools创建用户(首次添加使用 -c 参数)
sudo htpasswd -c /etc/nginx/auth_users admin输入密码并确认
2. 配置 Nginx
location /private {auth_basic "Restricted Area"; 认证提示信息auth_basic_user_file /etc/nginx/auth_users; # 密码文件路径可选:允许特定 IP 绕过认证satisfy any; 满足任一条件即可访问allow 网段 ; 内网无需认证deny all;
}
3. 安全加固
权限设置:限制密码文件访问权限:
sudo chown nginx:nginx /etc/nginx/auth_users
sudo chmod 600 /etc/nginx/auth_users
三、请求方法限制
限制允许的 HTTP 方法
1. 基础方法过滤
location /api {if ($request_method !~ ^(GET|POST)$ ) {return 405; # 返回 Method Not Allowed}其他配置...
}
2. 使用 limit_except
指令
更高效的方式:
location /api {limit_except GET POST {deny all; 拒绝非 GET/POST 请求}允许的请求继续处理
}
一、理解虚拟主机
虚拟主机允许在单个Nginx实例上托管多个网站,每个网站通过独立配置的server
块区分。支持的区分方式包括:
基于域名:不同域名指向同一服务器IP,Nginx根据请求的Host
头匹配对应站点。
基于端口:不同站点监听不同端口(如8080、8081)。
基于IP地址:不同站点绑定不同IP(较少用)。
二、Nginx配置文件结构
主配置文件:/etc/nginx/nginx.conf
,包含全局配置(如worker进程数、日志格式)。
模块化配置:通过include
指令加载其他目录的配置:
/etc/nginx/conf.d/
:推荐存放自定义配置文件(如example.com.conf
)。
/etc/nginx/sites-available/
(Ubuntu):存放可用站点配置。
/etc/nginx/sites-enabled/
(Ubuntu):存放已启用站点的符号链接。
三、配置基于域名的虚拟主机
1. 创建网站根目录
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com/html 确保Nginx用户有权访问
sudo chmod -R 755 /var/www
2. 创建虚拟主机配置文件
在/etc/nginx/sites-available/example.com
中写入
server {listen 80;server_name example.com www.example.com;root /var/www/example.com/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;}
}
3. 启用配置
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
4. 测试并重载Nginx
sudo nginx -t 检查语法
sudo systemctl reload nginx 应用配置
关键命令
命令 | 作用 |
---|---|
sudo nginx -t | 测试配置文件语法 |
sudo systemctl reload nginx | 重新加载配置(不中断服务) |
sudo systemctl restart nginx | 重启Nginx服务 |
tail -f /var/log/nginx/error.log | 实时查看错误日志 |
常见问题排查
-
权限问题:
-
确保网站目录所有者为Nginx用户
-
检查日志文件权限(
/var/log/nginx/
)。
-
-
配置语法错误:
-
使用
nginx -t
检查配置。
-
-
域名解析问题:
-
本地测试可修改
/etc/hosts
,生产环境需确保DNS记录正确。
-
-
端口冲突:
-
使用
ss -tuln | grep ':80'
检查端口占用
-