当前位置: 首页 > web >正文

一篇文章看懂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 默认使用以下端口提供不同服务:

端口协议用途示例场景
80TCP/HTTP提供 HTTP 明文服务基础网页访问、API 调用
443TCP/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实时查看错误日志

常见问题排查

  1. 权限问题

    • 确保网站目录所有者为Nginx用户

    • 检查日志文件权限(/var/log/nginx/)。

  2. 配置语法错误

    • 使用nginx -t检查配置。

  3. 域名解析问题

    • 本地测试可修改/etc/hosts,生产环境需确保DNS记录正确。

  4. 端口冲突

    • 使用ss -tuln | grep ':80'检查端口占用

http://www.xdnf.cn/news/3673.html

相关文章:

  • NV203NV207SSD固态闪存NV208NV213
  • NoxLucky:个性化动态桌面,打造独一无二的手机体验
  • 用docker ffmpeg测试视频vmaf分数,很快不用编译
  • C#VisionMaster算子二次开发(非方案版)
  • NocoDB:开源的 Airtable 替代方案
  • operator 可以根据需要重载 == 运算符进行比较
  • 《告别试错式开发:TDD的精准质量锻造术》
  • 【quantity】7 角度单位模块(angle.rs)
  • 电脑RGB888P转换为JPEG方案 ,K230的RGB888P转换为JPEG方案
  • CGI(Common Gateway Interface)协议详解
  • 【AI面试准备】TensorFlow与PyTorch构建缺陷预测模型
  • AtCoder AT_abc404_g [ABC404G] Specified Range Sums
  • ​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​
  • 前端面试每日三题 - Day 23
  • 泰迪杯特等奖案例学习资料:基于时空图卷积网络的城市排水系统水位精准重建与异常检测
  • Power Query精通指南2:数据转换——透视/逆透视/分组、横向纵向合并数据、条件判断、处理日期时间
  • 如何设计抗Crosstalk能力强的PCB镀穿孔
  • Linux 进程间通信(IPC)详解
  • 【计算机视觉】目标检测:yoloV1~yoloV11项目论文及对比
  • 【信息系统项目管理师-论文真题】2011上半年论文详解(包括解题思路和写作要点)
  • LVGL -文本显示 英文、中文
  • MaC QT 槽函数和Lambda表达式
  • Leetcode刷题记录29——矩阵置零
  • 【JavaScript】性能优化:打造高效前端应用
  • 数据赋能(212)——质量管理——统一性原则
  • ROS2学习笔记|实现订阅消息并朗读的详细步骤
  • Easy云盘总结篇-登录注册
  • C# 编程核心:控制流与方法调用详解
  • 力扣每日一题 ​838. 推多米诺​
  • PyCharm中全局搜索无效