nginx常用配置详解

先上一个nginx配置样例

bash 复制代码
#nginx的进程数,建议设置为CPU总核心数
worker_processes 1;
events {
    # 单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 1024;
}
http {
    # include: 导入外部文件mime.types
    include mime.types;
    default_type application/octet-stream;
    #开启高效文件传输模式,sendfile指令指定nginx是否使用sendfile函数来输出文件
    #对于普通应用设置为on,如果用于下载等磁盘IO重负载应用,可设置为off,来平衡磁盘和网络IO速度,降低系统负载。
    sendfile on;
    #长连接超时时间,单位秒
    keepalive_timeout 65;

    #server区块表示独立的虚拟主机站点
    server {
        #监听端口
        listen 80;
        #提供服务的域名/主机名
        server_name localhost;
        
        #location区块,对/开头的所有请求启用反向代理
        location / {
            root html; #访问资源所在目录
            index index.html index.htm; #默认的首页文件
            # 错误页面路由
            error_page 500 502 503 504 /50x.html; #出现对应的http状态码时,使用50x页面回应客户
            location = 50x.html {
                root html;
            }
        }
    }
}

一、整体结构

全局块

作用:从配置文件开始到events块之间的内容,设置一些会影响nginx服务器整体运行的配置指令,主要包括运行nginx服务器的用户(组)、允许生成的worker progress数、进程PID存放路径、日志存放路径。

bash 复制代码
worker_progresses 1;

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

events块

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

http块

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

http全局块

http全局块配置的指令包括mime-type定义、include其他配置文件、日志定义、连接超时时间、连接请求数上限等。

server块

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

每个http块可以包括多个server块。每个server块也包括server全局块、location块。

全局server块

虚拟主机的监听端口、虚拟主机的ip或名称配置

location块

这块的主要作用是基于Nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配。

对特定的请求进行处理,地址定向、数据缓存和应答控制等功能。

还有许多第三方模块的配置也在这里进行。

二、按功能配置

某些请求访问其他资源目录

使用alias指令

bash 复制代码
location /upload/ {
    alias /www/upload/;
}

反向代理

以下配置将请求重定向到其他服务地址。

bash 复制代码
 location /api/ {
        proxy_redirect off;
        proxy_set_header Host $host:$server_port; #添加:$server_port
        proxy_set_header X-Real-IP $remote_addr; #代理前的远程地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8087/;
 }

代理分为正向代理和反向代理。

什么是正向代理?国内访问不了Google,那么怎么才能访问Google呢?如果我们电脑的对外公网IP变成美国的IP地址,就可以访问Google了,VPN就是这样产生的。我们在访问Google时,先连上VPN服务器将我们的IP地址变成美国的IP地址,然后就可以顺利地访问了。

什么是反向代理?反向代理对客户端是无感知的,因为客户端不需要做任何配置就可以访问。我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后返回给客户端。

两者的区别:正向代理代理客户端,反向代理代理服务器。正向代理关注客户端的访问需求和安全性,反向代理更注重服务器端的负载均衡、安全性和性能优化。

反向代理服务可以衍生出很多与此相关的Nginx服务器重要功能,比如负载均衡。

负载均衡

将请求分配到多个服务上,分配的方式包括轮询、权重、iphash、最少连接、fair

轮询是Nginx负载默认的方式,所有的请求依次分配到不同的服务上,如果某个服务down掉,可以自动剔除。

bash 复制代码
upstream roll-server {
    server localhost:1001;
    server localhost:1002;
}

权重模式,指定每个服务的权重,weight和访问率成正比。

bash 复制代码
upstream weight-server {
    server localhost:1001 weight=1;
    server localhost:1002 weight=2;
}

iphash模式,根据访问的ip的hash结果分配,经过这样的处理,每个访客访问一个固定的后端服务,如下为iphash和weight混合使用的例子。

bash 复制代码
upstream iphash-server {
    iphash;
    server localhost:1001 weight=1;
    server localhost:1002 weight=2;
}

最少连接模式,将请求分配到连接数最少的服务上。

bash 复制代码
upstream least-server {
    least_conn;
    server localhost:1001;
    server localhost:1002;
}

fair模式,按后端服务器的响应时间来分配请求,响应时间短的优先匹配。

bash 复制代码
upstream fair-server {
    server localhost:1001;
    server localhost:1002;
    fair;
}

以轮询模式为例,完整的配置代码如下:

bash 复制代码
http {
    upstream roll-server {
        server localhost:1001;
        server localhost:1002;
    }

    server {
        listen 1000;
        server_name localhost;

        location / {
            proxy_pass http://roll-server;
            proxy_redirect default;
        }
    }
}

增加ssl支持

bash 复制代码
listen 443 ssl; #增加ssl
server_name xxxx;
ssl_certificate /usr/local/nginx/conf/cert/xxxx.pem; #证书
ssl_certificate_key /usr/local/nginx/conf/cert/xxxx.key; #秘钥
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

视频流服务

nginx还可以配置视频流播放服务,代理转发视频流,详见 nginx安装配置视频服务器_nginx配置视频文件服务器-CSDN博客

相关推荐
蓁蓁啊2 小时前
GIT使用SSH 多账户配置
运维·git·ssh
程序猿小三4 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
虚拟指尖5 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
椎4956 小时前
苍穹外卖前端nginx错误之一解决
运维·前端·nginx
刘某的Cloud6 小时前
parted磁盘管理
linux·运维·系统·parted
极验6 小时前
iPhone17实体卡槽消失?eSIM 普及下的安全挑战与应对
大数据·运维·安全
爱倒腾的老唐6 小时前
24、Linux 路由管理
linux·运维·网络
yannan201903136 小时前
Docker容器
运维·docker·容器
_清浅6 小时前
计算机网络【第六章-应用层】
运维·服务器·计算机网络
正在努力的小河6 小时前
Linux 自带的 LED 灯驱动实验
linux·运维·服务器