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

Web与Nginx网站服务二

Web与Nginx网站服务

Nginx安装与配置详解

全局配置

#user nobody;  user nginx          # 运行用户
worker_processes 4;               # 工作进程数量
#error_log logs/error.log;        # 错误日志文件的位置
#pid logs/nginx.pid;              # PID文件的位置

I/O事件配置

events {use epoll;                    # 使用epoll模型(Linux)worker_connections 4096;      # 每个进程处理4096个连接
}

HTTP配置

http {include       mime.types;     # 文件扩展名与文件类型映射表default_type  application/octet-stream; # 默认文件类型# 日志格式设定#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main; # 访问日志位置sendfile        on;           # 支持文件发送(下载)keepalive_timeout  65;        # 连接保持超时时间#gzip  on;                    # gzip压缩输出
}

Web服务监听配置

server {listen 80;                    # 监听地址及端口server_name www.fyl.com;      # 站点域名charset utf-8;                # 网页的默认字符集location / {root html;                # 网站根目录的位置index index.html index.php; # 默认首页文件名}# 内部错误的反馈页面error_page 500 502 503 504 /50x.html;# 错误页面配置location = /50x.html {root html;}
}

Nginx虚拟主机配置

基于域名的虚拟主机

server {listen 80;server_name www.yjs.com;                    # 设置域名www.yjs.comcharset utf-8;access_log logs/www.yjs.access.log;         # 设置日志名location / {root /usr/local/nginx/html/yjs;         # 设置工作目录index index.html index.php;}
}server {listen 80;server_name www.benet.com;                  # 设置域名www.benet.comcharset utf-8;access_log logs/www.benet.access.log;location / {root /usr/local/nginx/html/benet;index index.html index.php;}
}

基于IP的虚拟主机

server {listen 192.168.10.22:80;                    # 设置监听地址192.168.10.22server_name www.yjs.com;# ...其他配置
}server {listen 192.168.10.40:80;                    # 设置监听地址192.168.10.40server_name www.benet.com;# ...其他配置
}

基于端口的虚拟主机

server {listen 192.168.10.22:8080;                  # 设置监听8080端口server_name www.yjs.com;# ...其他配置
}server {listen 192.168.10.22:8888;                  # 设置监听8888端口server_name www.benet.com;# ...其他配置
}

Nginx反向代理与负载均衡

反向代理原理

  • 用户请求先到Nginx,再由Nginx转发给后端应用服务器
  • Nginx充当"中转站",客户端不知道真正提供服务的后端服务器

配置示例

server {listen 80;server_name localhost;location / {proxy_pass http://127.0.0.1:8080;       # 转发到后端8080端口proxy_set_header Host $host;            # 保留原始Host头proxy_set_header X-Real-IP $remote_addr; # 获取客户端真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

负载均衡策略

1. 轮询(Round Robin)
upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
2. 最少连接数(Least Connections)
upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
3. IP哈希(IP Hash)
upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
4. 加权轮询(Weighted Round Robin)
upstream backend {server backend1.example.com weight=3;server backend2.example.com weight=1;server backend3.example.com weight=2;
}
5. 带健康检查的配置
upstream backend {server 192.168.0.101 weight=3 max_fails=3 fail_timeout=30s;server 192.168.0.102 weight=1 max_fails=3 fail_timeout=30s;
}

Tomcat:Java Web应用服务器

Tomcat的本质

Tomcat本质上是一个Servlet容器,也可以称作轻量级Web应用服务器(Web Server + Servlet Container)。

主要职责

  • 接收HTTP请求(内置简单的HTTP服务器)
  • 将请求分发给对应的Web应用(基于URL映射)
  • 执行Servlet/JSP并生成响应
  • 返回HTTP响应给客户端

目录结构

tomcat/
├── bin/           # 启动/停止脚本
├── conf/          # 配置文件(server.xml、web.xml)
├── lib/           # 依赖库
├── logs/          # 日志文件
├── webapps/       # 部署Web应用的位置
├── work/          # 运行时生成的临时文件
└── temp/          # 临时文件目录

与Nginx配合使用

server {listen 80;server_name your-domain.com;location / {proxy_pass http://127.0.0.1:8080;     # 转发到Tomcatproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

LNMP架构:Linux + Nginx + MySQL + PHP

架构组成

组件作用
Linux操作系统,提供稳定运行环境
NginxWeb服务器,处理静态请求、反向代理
MySQL数据库,存储应用数据
PHP脚本语言,处理动态请求,生成HTML或JSON

请求处理流程

  1. 用户请求 → Nginx
  2. 静态资源 → Nginx直接返回
  3. 动态请求(.php)→ Nginx通过fastcgi协议转发给PHP-FPM
  4. PHP-FPM执行PHP代码,可能查询MySQL数据库
  5. PHP-FPM将执行结果返回给Nginx
  6. Nginx将最终响应返回给用户

Nginx支持PHP配置

server {listen 80;server_name your-domain.com;root /usr/share/nginx/html;index index.php index.html index.htm;location / {try_files $uri $uri/ =404;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;    # PHP-FPM监听地址fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}

Nginx性能优化指南

性能优化配置

worker_processes auto;        # 自动设置为CPU核心数
events {worker_connections 10240; # 每个worker最大连接数use epoll;                # 使用epoll事件模型(Linux)
}sendfile on;                  # 开启高效文件传输模式
tcp_nopush on;
tcp_nodelay on;gzip on;                      # 开启Gzip压缩
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

安全优化

server_tokens off;            # 隐藏Nginx版本号
client_max_body_size 10m;     # 限制请求大小location ~ /\.ht {deny all;                 # 防止恶意扫描
}

缓存优化

# 浏览器缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, immutable";
}# 代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
location / {proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;
}

常见问题与解决方案

502 Bad Gateway

  • 症状:用户访问返回502错误
  • 解决:检查后端服务(如PHP-FPM、Tomcat)是否运行,检查proxy_pass或fastcgi_pass配置

404 Not Found

  • 症状:静态资源或页面找不到
  • 解决:检查root或alias路径是否正确,确认文件是否存在且有读取权限

高并发连接数不足

  • 症状worker_connections不足,日志中出现too many open files错误
  • 解决:增加worker_connections值,调整系统文件描述符限制

日志文件过大

  • 症状:日志文件占用大量磁盘空间
  • 解决:配置日志轮转和压缩,使用logrotate管理日志

总结

Nginx作为一个高性能的Web服务器和反向代理服务器,在现代Web架构中扮演着至关重要的角色。通过合理的配置和优化,Nginx能够处理高并发请求,提供稳定的服务,并与各种后端技术(如Tomcat、PHP-FPM等)无缝集成。

掌握Nginx的配置和优化技巧,对于任何Web开发者和系统管理员来说都是一项宝贵的技能。希望本指南能帮助你更好地理解和使用Nginx,构建高性能、高可用的Web服务。


文章转载自:

http://YlB7sqGd.xxsrm.cn
http://cCmUaOs8.xxsrm.cn
http://TfE5eCvE.xxsrm.cn
http://eEjize3K.xxsrm.cn
http://FzaYlEqa.xxsrm.cn
http://aeoZgDaz.xxsrm.cn
http://zEvovx7Z.xxsrm.cn
http://iHoJUjlC.xxsrm.cn
http://FDv7GzEn.xxsrm.cn
http://vA48CSzQ.xxsrm.cn
http://yqLOfL5s.xxsrm.cn
http://Dc5BTWhx.xxsrm.cn
http://11iG7Tzj.xxsrm.cn
http://d9GhVV0c.xxsrm.cn
http://WXOpqJTu.xxsrm.cn
http://vR3jxG3g.xxsrm.cn
http://BvqSfDhU.xxsrm.cn
http://QgOZpjVP.xxsrm.cn
http://caGpyz8s.xxsrm.cn
http://ETSwke0b.xxsrm.cn
http://3Fh7lVyb.xxsrm.cn
http://kVf1bqO7.xxsrm.cn
http://Z6hHVKrt.xxsrm.cn
http://XONDbReN.xxsrm.cn
http://L2rtV5Oa.xxsrm.cn
http://3tBv7QUH.xxsrm.cn
http://a036CBKb.xxsrm.cn
http://bhDWYoZ4.xxsrm.cn
http://HSJlQMx2.xxsrm.cn
http://ijTOsSqw.xxsrm.cn
http://www.dtcms.com/a/373131.html

相关文章:

  • [硬件电路-166]:Multisim - SPICE与Verilog语言的区别
  • 计算机毕业设计 基于Python+Django的医疗数据分析系统
  • 鸿蒙:绑定半模态页面(bindSheet)
  • 001-003 产品经理-ML应用构建-ML应用范围
  • Node中使用 fs 和 node:fs 的区别与选择
  • SYN 包在什么场景下会被丢弃
  • R 语言科研绘图 --- 其他绘图-汇总2
  • Aider AI Coding 多策略编码系统深度分析报告
  • 胜券POS:打造智能移动终端,让零售智慧运营触手可及
  • tensorflow.js 使用场景
  • 【技术教程】如何将ONLYOFFICE文档集成到使用Spring Boot框架编写的Java Web应用程序中
  • 安卓学习 之 用户登录界面的简单实现
  • 3 提示词(Prompt):大模型的交互语言
  • 微信小程序体验版,当打开调试模式正常访问,关闭之后无法访问
  • 虚拟机ubuntu22.04没有网
  • 【WorkManager】无法在 Direct Boot 模式下初始化
  • Prompt Engineering to Context Engineering
  • Swift 语法学习指南 - 与 Kotlin 对比
  • Redux和MobX在React Native状态管理中的优缺点对比
  • 新的一天开始2025.9.8
  • LAMPSecurity: CTF6靶场渗透
  • 服务器安装 LDOPE(MODIS 数据处理工具)
  • 动态线程池中修改核心线程数比当前线程数要少,会不会影响正在执行的线程任务
  • Axum文档 ~ 2.路由
  • 【C++】IO库
  • 常见的显示器接口技术
  • 如何在本地机器上使用LLM构建知识图谱(一)
  • 论文阅读:ACL 2023 MPCHAT: Towards Multimodal Persona-Grounded Conversation
  • Java全栈开发工程师的实战面试:从基础到微服务
  • 向量回归策略