凌峰创科服务平台

Nginx搭建Web服务器,关键步骤有哪些?

nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务部署,其特点是轻量级、高并发、低内存消耗,同时具备丰富的功能模块,以下从安装配置、核心功能优化、安全加固等方面详细介绍如何使用 nginx 搭建 Web 服务器。

Nginx搭建Web服务器,关键步骤有哪些?-图1
(图片来源网络,侵删)

环境准备与安装

在搭建 nginx Web 服务器前,需确保系统满足基本环境要求(以 Linux 为例,推荐 CentOS 7+ 或 Ubuntu 18.04+),首先更新系统软件包,并安装必要的依赖库,如 gccpcreopensslzlib 等,这些是编译 nginx 所需的核心组件。

编译安装(推荐)

通过编译安装可灵活选择功能模块,适合定制化需求,下载 nginx 最新稳定版源码(官网获取),执行以下命令:

# 安装依赖
yum install -y gcc pcre-devel openssl-devel zlib-devel  # CentOS
apt install -y gcc libpcre3-dev libssl-dev zlib1g-dev  # Ubuntu
# 下载并解压
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 配置编译参数(可自定义模块)
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module
# 编译安装
make && make install

编译完成后,nginx 将安装到 /usr/local/nginx 目录,其核心配置文件为 conf/nginx.conf,可执行文件位于 sbin/nginx

服务管理

为方便使用,可将 nginx 注册为系统服务,创建服务文件 /usr/lib/systemd/system/nginx.service如下:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PIDFile=/usr/local/nginx/logs/nginx.pid
[Install]
WantedBy=multi-user.target

执行 systemctl enable --now nginx 启动并设置开机自启。

核心配置与功能实现

nginx 的核心功能通过配置文件实现,以下以典型 Web 服务场景为例,介绍关键配置项。

基础 HTTP 服务配置

编辑 conf/nginx.conf,定义 HTTP 服务块(server 块),包含监听端口、域名、根目录等基本参数:

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;
    # Web 服务配置
    server {
        listen       80;
        server_name  www.example.com localhost;
        root   html;  # 网站根目录,绝对路径如 /data/www
        index  index.html index.htm;
        # 访问规则示例
        location / {
            try_files $uri $uri/ =404;
        }
        # 错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • listen:监听端口,可配置 IP:PORT 或仅端口;
  • server_name:虚拟主机域名,支持多个域名(空格分隔)或通配符(如 *.example.com);
  • root:网站文件根目录,需确保目录存在且 nginx 进程有读取权限;
  • location:匹配 URL 路径,try_files 用于检查文件是否存在,避免 404 错误。

静态资源优化

nginx 作为静态资源服务器时,可通过调整缓存、压缩等参数提升性能:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 7d;  # 缓存7天
    add_header Cache-Control "public, no-cache";
    gzip on;     # 开启压缩
    gzip_types text/plain application/json text/css application/javascript;
    gzip_min_length 1k;
}
  • expires:设置浏览器缓存时间,减少重复请求;
  • gzip:对文本类文件压缩,降低传输数据量。

负载均衡配置

当需要多台服务器共同处理请求时,可通过 upstream 模块实现负载均衡:

http {
    upstream backend {
        least_conn;  # 最少连接数策略
        server 192.168.1.10:8000 weight=3;  # 权重3
        server 192.168.1.11:8000 weight=1;
        server 192.168.1.12:8000 backup;   # 备用服务器
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
  • least_conn:动态选择最少连接的后端服务器,适合长连接场景;
  • weight:权重值越高,分配的请求比例越大;
  • backup:仅在其他服务器不可用时启用。

安全加固措施

为保障 Web 服务安全,需从访问控制、协议安全、防攻击等方面进行配置:

访问控制

  • IP 白名单:限制仅允许特定 IP 访问敏感路径:
    location /admin/ {
        allow 192.168.1.0/24;
        deny all;
    }
  • 基本认证:对目录或文件设置用户名密码(需依赖 htpasswd 工具生成密码文件):
    location /private/ {
        auth_basic "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

协议与证书配置

启用 HTTPS 可提升数据传输安全性,需配置 SSL 证书(以 Let's Encrypt 免费证书为例):

server {
    listen 443 ssl http2;
    server_name www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}
  • http2:启用 HTTP/2 协议,提升多路复用性能;
  • ssl_protocols:限制 TLS 版本,禁用不安全的 SSLv3/TLSv1.0。

防攻击配置

  • 防恶意爬虫:通过 User-Agent 限制爬虫访问:

    if ($http_user_agent ~* "bot|crawler|spider") {
        return 403;
    }
  • 防 DDOS 攻击:限制单 IP 连接数和请求频率:

    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
    location / {
        limit_conn conn_limit_per_ip 10;
        limit_req zone=req_limit_per_ip burst=20 nodelay;
    }

监控与维护

状态监控

启用 stub_status 模块可查看服务器连接状态:

location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

访问 http://server_ip/nginx_status,可显示当前活跃连接、连接总数等统计信息。

日志分析

nginx 日志包含丰富的访问信息,可通过 awkgrep 或 ELK 等工具分析,例如统计 Top 10 访问 IP:

awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr | head -10

相关问答FAQs

Q1:nginx 502 错误如何解决?
A:502 错误通常表示后端服务不可用或 nginx 与后端通信异常,排查步骤:

  1. 检查后端服务是否正常运行(如 PHP-FPM、Tomcat 等);
  2. 确认 proxy_pass 配置的后端 IP 和端口是否正确;
  3. 检查防火墙或安全组是否允许 nginx 服务器访问后端端口;
  4. 查看 nginx 错误日志(logs/error.log),定位具体错误原因(如连接超时、后端无响应等)。

Q2:如何优化 nginx 的高并发性能?
A:可从以下方面优化:

  1. 调整 worker 进程数:设置为 CPU 核心数,通过 worker_processes auto; 自动检测;
  2. 优化连接参数:增大 worker_connections(如 worker_connections 65535;),结合 worker_processes 计算最大并发数(worker_processes * worker_connections);
  3. 开启高效模式:启用 sendfile ontcp_nopush ontcp_nodelay on 减少网络 IO 消耗;
  4. 减少日志开销:生产环境可关闭 access 日志或关闭不必要字段(如 $http_x_forwarded_for);
  5. 使用内核参数调优:调整 /etc/sysctl.conf 中的 net.core.somaxconn(增大监听队列)、net.ipv4.tcp_tw_reuse(复用 TIME_WAIT 连接)等参数。
分享:
扫描分享到社交APP
上一篇
下一篇