Nginx配置:访问控制、虚拟主机与状态监控


前言

Nginx作为高性能的Web服务器,其灵活的配置体系是实现多样化服务的关键。本文将通过十大核心模块的配置解析,帮助您快速掌握Nginx的核心功能与应用技巧。


一、全局配置

1、全局配置对应语句

user  nginx; # 指定 Nginx Worker 进程的运行用户(及用户组,若未显式写组则默认与用户名相同)。
worker_processes  2; # 设置 Nginx 的 Worker 进程数量(核心业务进程,处理实际的网络请求),与cpu核数对应
error_log  logs/error.log; # 定义 Nginx 错误日志的存储路径和级别(默认级别为error,只记录严重错误)
pid        logs/nginx.pid; # 指定 Nginx 主进程 PID 文件的存储位置(PID 文件记录主进程的进程号)

日志路径说明:
若编译时未指定–prefix,默认 Prefix 为 /usr/local/nginx,则实际路径:/usr/local/nginx/logs/error.log
这段配置是 Nginx 的全局基础配置,核心目的是:

  • 通过user降低运行权限风险;
  • 通过worker_processes优化 CPU 利用率;
  • 通过error_log和pid管理日志与进程标识(注释状态下使用默认值)。

根据实际服务器配置(如 CPU 核数、安全需求)调整这些参数,可提升 Nginx 的稳定性和性能。

2、验证全局配置效果

1、验证user(运行用户)是否生效
ps aux | grep nginx
在这里插入图片描述
2、验证worker_processes(工作进程数)是否生效
在这里插入图片描述
3、验证error_log(错误日志路径)是否生效
ls -l /usr/local/nginx/logs/error.log
在这里插入图片描述
4、验证pid(PID 文件路径)是否生效
cat /usr/local/nginx/logs/nginx.pid
ps aux | grep nginx: master process
取消注释并指定路径(/usr/local/nginx/logs/nginx.pid),重启 Nginx 后查看文件:若输出 Nginx 主进程的 PID(如18226),且与ps aux | grep nginx: master process的 PID 一致,则生效。
在这里插入图片描述
在这里插入图片描述

二、I/O事件配置

events {
use epoll; #使用 epoll 模型,2.6及以上版本的系统内核,建议使用
epoll模型以提高性能
worker_connections 4096; #每个进程处理 4096 个连接
}

可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
/etc/security/limits.conf
扩展:

  • epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
  • 若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数
  • 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。

三、HTTP配置

http { … } 是 Nginx 处理 HTTP/HTTPS 请求的「总规则容器」,里面的配置是「全局生效」的 —— 比如日志格式、连接超时、文件类型映射,后续添加的虚拟主机(像之前的 www.yjs.com)都会默认用这些规则,不用重复写。

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;
    ## 数据包缓存发送(仅 sendfile 开启时有用,按需启用)
    #tcp_nopush on;
    ## 连接保持超时时间,单位是秒(长连接超时 65 秒)
    #keepalive_timeout 0;  # 禁用长连接(注释掉)
    keepalive_timeout 65;
    ## gzip模块设置:开启后压缩文本文件,提升加载速度(建议启用)
    gzip on;
}

四、web服务的监听配置

1、设置子目录

location /sjj {  # 专门匹配“路径里带 /zjl”的请求(子目录的独立配置)
        ##网站根目录的位置/usr/local/nginx/html/zjl
        root /usr/local/nginx/html;  # 这个子路径的文件存放在:/usr/local/nginx/html/sjj 文件夹
        index index.html index.php;  # 访问 /zjl 时,默认找这个文件夹下的 index.html 或 index.php
        }

验证结果:
在这里插入图片描述

2、监听用户访问次数-实战

location /status {
    stub_status on;
    access_log off;
    allow 192.168.1.0/24;  # 仅允许内网IP段访问
    deny all;               # 拒绝其他所有IP
}

在这里插入图片描述
配置的作用与使用场景
● 运维监控:通过/status可实时查看 Nginx 的负载情况(如连接数、请求处理效率),结合监控工具(如 Zabbix、Prometheus+Grafana)可实现告警;
● 性能分析:通过Reading/Writing/Waiting的比例,可分析 Nginx 的瓶颈(如Writing过高可能表示响应发送慢,Waiting过高可能表示长连接过多);
● 安全建议:若公网暴露/status,建议增加访问限制(如仅允许内网 IP 访问),避免泄露服务器状态信息,示例:nginx

五、其他配置(扩展)

日志格式设定
r e m o t e a d d r 与 remote_addr与 remoteaddrhttp_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
h t t p u s e r a g e n t :记录客户浏览器的相关信息;通常 w e b 服务器放在反向代理的后面,这样就不能获取到客户的 I P 地址了,通过 http_user_agent:记录客户浏览器的相关信息; 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过 httpuseragent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过remote_add拿到的IP地址
是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信
息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html
请求www.benet.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias /var/www/html
请求www.benet.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)

六、访问状态统计配置

1、查看已安装的所有模块

/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS
模块
在这里插入图片描述
cat /opt/nginx-1.20.2/auto/options | grep YES #可查看 nginx 已安装的所有模块
在这里插入图片描述

2、修改nginx.conf配置文件

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak

server {
listen 80;
server_name www.benet.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##添加 stub_status 配置##
location /status {   #访问位置为/status
www.benet.com/status
stub_status on; #打开状态统计功能
access_log off; #关闭此位置的日志记录
}
}

systemctl restart nginx
浏览器访问 http://192.168.10.21/status
在这里插入图片描述

  • Active connections :表示当前的活动连接数;
  • server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、
  • 成功的TCP握手次数、 已处理的请求数。

七、基于授权的访问控制

1、生成用户密码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db user
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

2、修改配置文件

server {
location / {
......
##添加认证配置##
auth_basic "secret"; #设置密码提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}

验证结果:
在这里插入图片描述
在这里插入图片描述

八、基于客户端的控制访问

限制和放行客户端
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf

访问控制规则如下:
......
server {
location / {
......
##添加控制规则##
allow 192.168.10.2; #允许访问的客户端 IP
deny all; #拒绝其它IP客户端访问
}
}
systemctl restart nginx

限制结果如下:
在这里插入图片描述

九、基于域名的虚拟机访问

C:\Windows\System32\drivers\etc\hosts(Windows)
写入:
192.168.10.101 www.yjs.com
192.168.10.101 www.benet.com

# 第一个虚拟主机:www.yjs.com
    server {
        listen       80;  # 监听 80 端口(默认 HTTP 端口)
        server_name  www.yjs.com;  # 绑定域名(必须和 hosts 一致)

        # 网页根目录(对应你创建的 yjs 目录)
        root /usr/local/nginx/html/yjs;
        # 默认首页
        index index.html index.htm;

        # 可选:添加访问日志(方便排查问题)
        access_log  logs/yjs.access.log;
        error_log   logs/yjs.error.log;
    }

    # 第二个虚拟主机:www.benet.com
    server {
        listen       80;  # 同一端口可绑定多个域名(Nginx 按 server_name 区分)
        server_name  www.benet.com;  # 绑定第二个域名

        root /usr/local/nginx/html/benet;  # 对应 benet 目录
        index index.html index.htm;

        access_log  logs/benet.access.log;
        error_log   logs/benet.error.log;
    }

域名访问结果:
在这里插入图片描述
在这里插入图片描述

十、基于IP 的 Nginx 虚拟主机

ip1

....
server {
listen 192.168.10.101:80; #设置监听地址192.168.101.22
server_name www.yjs.com;
charset utf-8;
access_log logs/www.yjs.access.log;
location / {
root /usr/local/nginx/html/yjs;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}

ip2

server {
listen 192.168.10.40:80; #设置监听地址192.168.10.40
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /usr/local/nginx/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}

不同ip访问nginx网站结果:
在这里插入图片描述
在这里插入图片描述

十一、基于端口的 Nginx 虚拟主机

基于端口1

server {
listen 192.168.10.101:8080; #设置监听 8080 端口
server_name www.yjs.com;
charset utf-8;
access_log logs/www.yjs.access.log;
location / {
root /var/www/html/yjs;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}

基于端口2

server {
listen 192.168.10.40:8088; #设置监听 8088 端口
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}

不同端口访问nginx服务
在这里插入图片描述
在这里插入图片描述


总结

本文系统梳理了Nginx从全局配置到虚拟主机的完整知识体系,涵盖访问控制、状态监控、负载均衡等实战场景。通过模块化配置详解,使读者能够根据业务需求灵活构建高性能Web服务,充分发挥Nginx在运维工作中的核心价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值