物理机配置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

# 更新软件源
apt update && apt upgrade -y
# 安装必要依赖库
apt install -y software-properties-common curl wget libssl-dev zlib1g-dev make gcc

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模块可实现更详细的指标采集。


常见问题FAQs

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

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

物理机配置nginx

  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指令指向正确的静态资源目录。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/94369.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年8月6日 15:20
下一篇 2025年6月26日 13:57

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN