百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

【Nginx】史上最全的Nginx配置详解

ahcoder 2025-06-28 11:40 1 浏览

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。

Nginx是非常重要的负载均衡中间件,被广泛应用于大型网站架构,下面我就全面来详解Nginx配置。

一、Nginx介绍

  • Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。
  • Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

二、Nginx功能

2.1 正向代理

需要客户自己在浏览器配置代理服务器地址。

例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。

2.2 反向代理

反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器。

由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

2.3 负载均衡

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上。

将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡

2.4 动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。示意图如下:

三、Nginx配置

Nginx配置文件所在位置:
/usr/local/nginx/conf/nginx.conf

3.1 Nginx配置结构

main        # 全局配置,对全局生效
├── events  # 配置影响 nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...

3.2 配置文件组成

全局块 + events块 + http块 组成

1.全局块

从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令。

主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。

worker_processes  1;
#这个是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。

2.events块

events块设计的指令主要影响Nginx服务器与用户的网络连接。

常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。

下面的例子表示每个work process支持的最大连接数为1024,这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。

events {
    worker_connections  1024;
}

3.http块

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。

  • http全局块

http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

每个server块也可以分为全局server块,以及可以同时包含多个location块。

1)全局server块

最常见的配置时本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

2) location块

一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

四、Nginx常用配置模板

4.1 反向代理

Nginx 常用作反向代理服务器,将请求转发到后端服务器:

server {
    listen 80;
    server_name example.com;
 
    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

4.2 负载均衡

Nginx 还支持负载均衡,将流量分配到多个后端服务器:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
 
    server {
        listen 80;
        server_name example.com;
 
        location / {
            proxy_pass http://backend;
        }
    }
}

4.3 SSL/TLS 配置

为了安全性,许多站点都需要启用 SSL/TLS:

server {
    listen 443 ssl;
    server_name example.com;
 
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

4.4 重定向

Nginx 可以实现 URL 重定向:

server {
    listen 80;
    server_name old.example.com;
 
    return 301 http://new.example.com$request_uri;
}

4.5 Nginx动静分离配置实例

worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.100.201;
        
        location /www/ {
            root   /data/;
            index  index.html index.htm;
        }


        location /image/ {
            root   /data/;
            autoindex on;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

五、优化与安全配置

5.1 Gzip 压缩

启用 Gzip 压缩以减少传输数据量:

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

5.2 限制请求速率

防止恶意请求,限制请求速率:

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
 
    server {
        location / {
            limit_req zone=mylimit burst=5;
        }
    }
}

5.3 防止点击劫持

使用 X-Frame-Options 头防止点击劫持:

http {
    add_header X-Frame-Options "SAMEORIGIN";
}

5.4 防止跨站脚本攻击 (XSS)

使用 Content-Security-Policy 头防止 XSS 攻击:

http {
    add_header Content-Security-Policy "default-src 'self'";
}

六、结语

Nginx 的配置文件虽然看似复杂,但掌握其基本结构和常用指令后,你将发现其强大的灵活性和扩展性。无论是作为 Web 服务器、反向代理还是负载均衡器,Nginx 都能胜任其职。希望本文能帮助你更好地理解和使用 Nginx 配置文件,充分发挥 Nginx 的优势。


相关推荐

Nginx的http块sendfile,keepalive_timeout的配置指令说明,

sendfile是用来设置Ngnix服务的一种静态资源的写法sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能这里send...

Docker安装和配置Nginx(docker-compose部署nginx)

下载镜像dockerpullnginx检查Nginx镜像dockerimages创建挂载目录mkdir-p/home/docker-nginx/confmkdir-p/home/doc...

记:Nginx 如何配置SSL证书(nginx添加ssl证书)

引言最近,有几个其他项目团队的同事问了我几个类似问题:“钦哥,我们微信小程序微信支付,怎么回调不没反应?”“钦哥,我们的项目怎么无法通过https访问的?”然后就有想把配置ssl证书的过程,记录一...

多项目nginx部署配置(nginx多站点配置示例)

在前后端分离的项目中,前端部署大部分都采用nginx部署。在我参与的一个项目中,后台管理前端和业务应用前端是作为两个独立项目开发的。以往部署时通过不同端口来访问这两个项目,这就导致前端存储的token...

NGINX最佳缓存配置策略(nginx最佳缓存配置策略有哪些)

Nginx可以配置的参数有很多,今天我们来看一下Nginx的缓存如何配置。no-cache和no-store“no-cache”表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用该响应来满足...

通过 docker 学习 nginx,附全部配置及 API 测试,使用 apifox 直接打开

本篇文章以前端的视角,介绍下nginx的常见配置,并通过docker的方式学习nginx,这保证所有实例配置都能正常运行。我将本文所有关于docker/nginx的配置放置在simple...

nginx配置负载均衡 以及宕机了后,怎么配置高可用

Nginx负载均衡配置是一个分发请求的过程。可以通过将同一个服务的多个实例配置到不同的服务器上,通过Nginx代理请求,将请求分发到这些实例上实现负载均衡。下面详细介绍Nginx负载均衡的配置过程和宕...

nginx反向代理加https证书和自动跳转配置

nginx反向代理加https证书和自动跳转配置如果对运维课程感兴趣,可以在b站上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频1.机器规划:nginx代理机器:192.16...

【Nginx基础】Nginx常见负载均衡策略配置示例

下面是一些常用的Nginx负载均衡策略及其配置示例:轮询(RoundRobin)这是默认的负载均衡策略,它将请求依次分配给不同的后端服务器。upstreambackend{server...

nginx中配置固定的JSON响应(nginx指定conf)

前提在进行性能测试时,使用mock接口是一种非常有效的方法,可以帮助您模拟真实服务的行为,从而避免对外部系统的依赖。使用Nginx作为mock接口的返回源不仅可以快速配置,还能确保mock接口本身不...

Nginx基本安全配置(防盗连、隐藏版本号、防嵌套等)

在生产环境中nginx有很多安全方案,我在为生产环境部署中得到很多经验,收集到的一些常用配置,简单记录一下。安装Nginx正常安全Nginx大家应该都会,但是各位要知道在安全要求很高的生产环境中,是无...

nginx如何配置跨域(nginx配置解决跨域)

要在Nginx中配置跨域,可以使用add_header指令来添加Access-Control-Allow-*头信息,如下所示:location/api{if($reques...

Nginx合集-限流配置方案参考(nginx lua限流)

Nginx为我们提供了请求限制模块(ngx_http_limit_req_module)、基于令牌桶算法的流量限制模块(ngx_stream_limit_conn_module),可以方便的控制令牌速...

韩国站群服务器Nginx反向代理多IP配置指南

在站群服务器的运营中,Nginx反向代理技术如同一座智能调度中心,既能隐藏真实服务器架构,又能实现流量精准分发。尤其对于部署在韩国数据中心的站群而言,合理配置多IP反向代理,可显著提升SEO安全性与服...

Nginx配置前后端服务(nginx配置前端页面部署)

nginx安装完成后,可以通过命令查看配置文件nginx-t配置文件nginx.conf,是总的配置,有的人会把配置全部配置到这个文件中,如果服务很多,这个文件变得非常庞大,我见过一个配置很大的,在...