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

一篇文章看懂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'检查端口占用

相关文章:

  • C与指针4——指针
  • 04 基于 STM32 的时钟展示程序
  • js单调栈解题模板
  • [UVM]UVM中reg_map的作用及多个rem_map的使用案例
  • QNAP Duplicati 备份 123云盘
  • Learning vtkjs之Cutter
  • Spring AI 实战:第一章、Spring AI入门之DeepSeek调用
  • 深入解析高并发场景下分布式缓存优化实战:从原理到性能提升
  • MIT6.S081-lab8
  • 创建第一个简单cesium程序
  • Vscode+git笔记
  • 什么是 Redis?
  • PCIe | TLP | 报头 / 包格式 / 地址转换 / 配置空间 / 寄存器 / 配置类型
  • 叠层阻抗线框
  • MNN 支持 DeepSeekVL
  • Docker安装Ollama及使用Ollama部署大模型
  • 解析机器人 2.0.2 | 支持超过50种短视频平台的链接解析,无水印提取,多功能下载工具
  • deepSeek论文写作提示词指令大全(覆盖选题、写作、润色到投稿全流程)
  • 测试基础笔记第十八天
  • linux下,ollama会把模型文件保存在哪里?
  • 艺术开卷|韩羽读齐白石:妙在似与不似之间
  • 孙一凡的东欧狂想音乐会:一场穿越东欧的听觉绮梦
  • 对谈|“对工作说不”是不接地气吗?
  • 印度宣布即日起对所有巴基斯坦航班关闭领空
  • 亚马逊拟为商品标注“关税成本”,特朗普致电贝索斯讨说法
  • 应急管理部派出工作组赴山西太原小区爆炸现场指导救援处置