当前位置:首页 > 物理机 > 正文

物理机配置nginx

物理机装Nginx:下载对应系统包→解压/编译安装→改conf/nginx.conf设监听端口与根目录→启服务systemctl start nginx,开放防火墙端口,浏览器访问验证

系统环境准备

1 硬件与操作系统选型

组件 推荐规格 说明
CPU ≥4核 多核提升并发处理能力
内存 ≥8GB 单台Nginx实例约占用50-100MB内存,预留缓存空间
存储 SSD硬盘(系统盘+数据盘) 系统盘建议50GB以上,数据盘根据业务需求分配
操作系统 Ubuntu Server LTS/CentOS 优先选择长期支持版(如Ubuntu 22.04/CentOS Stream),避免短期失效风险
网络带宽 ≥1Gbps 根据预期流量调整,高并发场景建议万兆网卡

2 基础依赖安装

以Ubuntu为例执行以下命令:

物理机配置nginx 第1张

Nginx安装方式对比与实施

1 三种主流安装方案

方案 优点 缺点 适用场景
官方APT仓库安装 简单快捷

自动更新补丁

版本滞后于最新版 快速部署/低风险环境
源码编译安装 最新版本

自定义模块

编译耗时

维护成本高

功能定制/性能极致需求
Docker容器化部署 环境隔离

快速迁移

额外学习成本

IO损耗

微服务架构/混合云

2 官方仓库安装示例(Ubuntu)

# 添加Nginx Mainline PPA(获取最新稳定版) add-apt-repository ppa:nginx/stable apt update # 安装主程序及常用模块 apt install -y nginx nginx-extras # 启动并设为开机自启 systemctl enable --now nginx


核心配置文件解析(/etc/nginx/nginx.conf)

1 全局模块配置

# 工作进程数 = CPU物理核心数 worker_processes auto; # auto表示自动匹配CPU核心数 # 事件驱动模型(epoll/kqueue等) events { use epoll; # Linux专属高效事件模型 worker_connections 10240; # 单个进程最大连接数 }

2 HTTP主模块配置

http { # 日志格式定义 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 /var/log/nginx/access.log main buffer=16k; # 错误日志级别 error_log /var/log/nginx/error.log warn; # 客户端请求超时时间(单位:秒) client_max_body_size 100m; # 上传文件大小限制 client_body_timeout 60s; # 请求体读取超时 client_header_timeout 60s; # 请求头读取超时 # 保持长连接相关参数 keepalive_timeout 65; # TCP连接复用超时 keepalive_requests 100; # 单连接最大请求数 # GZIP压缩配置 gzip on; # 开启压缩 gzip_min_length 1k; # 最小压缩文件大小 gzip_types text/plain application/javascript; # 压缩类型 }

3 虚拟主机配置示例(/etc/nginx/sites-available/default)

server { listen 80; # 监听端口 server_name example.com; # 域名解析 root /var/www/html; # 网站根目录 index index.html; # 默认索引文件 location / { try_files $uri $uri/ =404; # 优先尝试精确匹配,其次目录索引,最后404 } # 静态资源加速配置 location ~ .(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 浏览器缓存30天 add_header Cache-Control "public"; } # PHP反向代理示例 location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # FastCGI UnixSocket fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 包含默认FastCGI参数 } }


高级功能配置

1 HTTPS证书部署(Let’s Encrypt)

# 安装Certbot插件 apt install -y certbot python3-certbot-nginx # 申请证书(自动修改Nginx配置) certbot --nginx -d example.com -d www.example.com # 自动续期(crontab添加) 0 0 2 root /usr/bin/certbot renew --quiet --post-hook "systemctl restart nginx"

2 负载均衡配置示例

upstream app_cluster { least_conn; # 根据最少连接数分配请求 server 192.168.1.101:8080; # 后端服务器1 server 192.168.1.102:8080; # 后端服务器2 server 192.168.1.103:8080 backup; # 备用服务器 } server { listen 80; location / { proxy_pass http://app_cluster; # 转发至上游服务器组 proxy_set_header Host $host; # 传递原始Host头 proxy_set_header X-Real-IP $remote_addr; # 记录真实客户端IP } }

3 安全防护配置

# 禁止恶意User-Agent map $http_user_agent $bad_bot { default 0; ~(Scrapy|Bot|Crawler) 1; # 拦截爬虫类UA } server { # IP黑名单(CIDR格式) deny 192.168.1.100/32; # 封禁特定IP # 请求频率限制(每分钟最多10次) limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/m; location /api/ { limit_req zone=perip burst=20 nodelay; # 突发请求缓冲区大小 } }


性能优化策略

优化项 默认值 推荐值 作用说明
worker_connections 512 10240 单个进程最大并发连接数
worker_rlimit_nofile unlimited 20480 单个进程可打开的最大文件描述符数量
sendfile on off on 启用零拷贝发送文件
tcp_nopush on off on 减少小包发送次数
directio size off 4m 大文件直接I/O操作
output_buffers off 8 16k 输出缓冲区设置
postponed_accept off on 延迟建立TCP连接直至数据准备好
multi_accept off on 允许同时接受多个新连接
epoll { Linux专属事件模型参数
worker_connections 10240 同全局worker_connections保持一致


日志管理与监控

1 日志切割配置(/etc/logrotate.d/nginx)

/var/log/nginx/.log { daily # 每日切割 missingok # 忽略缺失文件错误 rotate 7 # 保留最近7天日志 compress # 压缩旧日志 delaycompress # 延迟一天压缩(避免当天日志被压缩) notifempty # 空日志不切割 create 640 nginx # 新建日志文件权限 sharedscripts # 共享脚本参数 postrotate # 切割后执行命令 [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` > /dev/null 2>/dev/null || true endscript }

2 Prometheus监控集成

# 在http模块中添加监控端点 location /metrics { stub_status on; # 启用基础状态监控 allow 127.0.0.1; # 仅本地访问(生产环境需替换为监控IP) deny all; }

结合nginx-module-vts模块可实现更详细的指标采集。

物理机配置nginx 第2张


常见问题FAQs

Q1: Nginx启动失败提示”Address already in use”?

A: 这是由于目标端口已被其他进程占用,解决方法:

  1. 使用netstat -tulnp | grep <PORT>查看占用进程PID;
  2. 根据情况选择以下操作之一:
    • kill -9 <PID>强制终止冲突进程;
    • 修改Nginx配置文件中的listen端口;
    • 检查是否存在僵尸进程残留。

Q2: 访问静态资源出现403 Forbidden错误?

A: 常见原因及解决方案:

  1. 文件权限不足:执行chmod -R 755 /path/to/static赋予读权限;
  2. SELinux阻止访问:临时禁用验证setsebool -P httpd_can_network_connect on;
  3. 目录遍历限制:检查autoindex模块是否启用,或添加autoindex on;到对应location块;
  4. 根目录配置错误:确认root指令指向正确的静态资源目录。

物理机配置nginx 第3张

0