Nginx从入门到精通之Nginx应用场景和配置参数最佳实践

news2025/1/10 17:18:27

高级Nginx应用场景和配置技巧

文章目录

  • 高级Nginx应用场景和配置技巧
  • 1. 配置参数最佳实践
  • 2. Nginx配置示例
  • 3. 常见场景
    • 1. 静态文件服务
    • 2. 动态内容代理
    • 3. SSL加密
    • 4. URL重写
    • 5. 访问控制
    • 6. 请求限制
    • 7. 日志记录
    • 8. 压缩
    • 9. 定向与错误页面
    • 10. 跨域配置
    • 11. 长连接处理
    • 12. 代理WebSockets
    • 13. HTTP/2配置
    • 14. GeoIP配置
    • 15. 强制HTTPS
    • 16. IP黑名单
    • 17. 流量控制
    • 18. IP访问控制
    • 19. 负载均衡
    • 20. 认证与授权
    • 21. 缓存

在这里插入图片描述

Nginx是一款高效、稳定、可靠的Web服务器软件,同时也可以作为代理服务器、泛型TCP/UDP代理服务器,以及负载均衡器。下面将介绍一些Nginx的高级应用场景和配置技巧。涵盖了Nginx的工作进程数、连接数上限、日志路径、文件类型映射、默认文件类型、日志格式、日志文件路径、sendfile指令、连接超时时间、gzip压缩、虚拟主机配置等基本设置。在实际应用中,根据具体需求对配置进行调整和优化。

1. 配置参数最佳实践

  1. worker_processes auto; 这个指令会告诉nginx在服务器上启动多少个worker进程。最佳实践是将其设置为“auto”,这样NGINX会自动根据服务器的CPU核心数量启动相应的worker进程。

  2. worker_connections 1024; 这个指令会告诉每个worker进程能够处理的最大连接数。如果你的服务器有足够的资源,你可以增加这个数字。

  3. sendfile on; 这个指令启用sendfile系统调用,可以更高效地发送文件。

  4. tcp_nopush on; 这个指令用于优化TCP包的发送。

  5. tcp_nodelay on; 这个指令用于后端连接,使得响应更及时。

  6. keepalive_timeout 65; 这个指令设置了客户端与服务器之间的keep-alive连接超时时间。

  7. gzip on; 这个指令启用gzip压缩,可以减少客户端和服务器之间传输的数据量。

  8. server_tokens off; 这个指令用于关闭服务器的响应头中的版本信息,有助于提高服务器的安全性。

  9. client_max_body_size 100m; 这个指令设置了客户端请求体的最大大小。如果你的应用需要用户上传文件,你可能需要调整这个值。

  10. fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; 这些指令设置了与FastCGI服务器的连接、发送和读取的超时时间。

  11. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 这个指令设置了SSL协议的版本。建议使用最新的协议版本以提高安全性。

  12. ssl_prefer_server_ciphers on; 这个指令建议服务器使用的加密套件,这有助于提高服务器的安全性。

2. Nginx配置示例

Nginx配置示例,包含了许多常用的配置项。

# 定义工作进程数,通常设置为等于CPU核数
worker_processes  auto;

# 进程文件
pid        /var/run/nginx.pid;

# 工作模式及连接数上限
events {
    worker_connections  1024;  # 单个后台worker process进程的最大并发链接数
}

# 设置日志路径,级别等
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 /var/log/nginx/access.log main;

    # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    # 对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 非常重要的应用,可设置为 off,以平衡磁盘 IO 进程,降低系统的 uptime.
    sendfile        on;
    # tcp_nopush     on;

    # 链接超时时间
    keepalive_timeout  65;

    # gzip压缩开关
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;

    # 虚拟主机配置
    server {
        # 监听端口
        listen       80;

        # 域名
        server_name  localhost;

        # 默认请求的静态文件前缀
        location / {
            root   html;
            index  index.html index.htm;
        }

        # 匹配以.php结尾的请求
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

        # 匹配以.html结尾的请求
        location ~ /\.ht {
            deny  all;
        }
    }
}

3. 常见场景

1. 静态文件服务

Nginx可以将硬盘上的静态文件服务于Web。对于静态内容,Nginx能提供极高的并发支持。

server {
    location /static/ {
        root /var/www/;
    }
}

2. 动态内容代理

Nginx可以作为反向代理服务器,代理后端的动态内容,如PHP、Python应用等。

location / {
    proxy_pass http://localhost:8000;
}

3. SSL加密

Nginx支持SSL加密,可以提供HTTPS服务。

server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
}

4. URL重写

Nginx的URL重写功能可以将用户易于理解的URL映射到实际的文件路径或者代理路径。

rewrite ^/user/(\d*)$ /user?id=$1;

5. 访问控制

Nginx可以配置访问控制,禁止或者允许某些IP或者地理位置的用户访问。

location /admin/ {
    allow 192.168.1.0/24;
    deny all;
}

6. 请求限制

Nginx可以限制并发的连接数量和请求速率,预防服务被恶意请求攻击。

location /login/ {
    limit_req zone=one burst=5;
}

7. 日志记录

Nginx提供详细的日志功能,可以记录每个请求的详细信息。

access_log /var/log/nginx/access.log main;

8. 压缩

Nginx可以对响应内容进行GZIP压缩,减少网络传输的数据量。

gzip on;
gzip_types text/plain application/xml;

9. 定向与错误页面

Nginx可以配置重定向和自定义的错误页面。

location /old-url {
    rewrite ^ http://www.example.com/new-url permanent;
}

10. 跨域配置

Nginx可以很容易地配置跨域资源共享(CORS)。

location / {
    if ($http_origin ~* (https?://.*\.example\.com(:[0-9]+)?$)) {
        add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    }
}

11. 长连接处理

Nginx可以配置长连接,大大提高效率。

keepalive_timeout  65;

12. 代理WebSockets

Nginx可以配置代理WebSockets,适用于实时通信。

location /ws/ {
    proxy_pass http://websocket_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

13. HTTP/2配置

Nginx支持HTTP/2协议,可以提高网页加载速度。

server {
    listen 443 ssl http2;
    server_name www.example.com;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
}

14. GeoIP配置

Nginx可以利用GeoIP模块根据访问者的IP地址判断其物理位置。

location / {
    if ($geoip_country_code = CN) {
        return 301 http://cn.example.com$request_uri;
    }
}

15. 强制HTTPS

Nginx可以强制将HTTP请求跳转到HTTPS。

server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

16. IP黑名单

Nginx可以将特定的IP列入黑名单,拒绝其访问请求。

location / {
    deny 192.168.1.1;
}

17. 流量控制

利用Nginx的限速模块,可以很容易地对某个位置或者具体用户等进行限速。

location /download/ {
   limit_rate 10k;
}

18. IP访问控制

Nginx可以根据访问者的IP地址进行访问控制,比如只允许特定IP访问,或者禁止特定IP访问。

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

19. 负载均衡

Nginx可以作为负载均衡器,将流量分发到多个后端服务器。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
    }
}

20. 认证与授权

Nginx支持多种认证方式,如基于IP的访问控制,基于密码的HTTP基本认证,甚至可以通过第三方模块实现OAuth等复杂的认证机制。

location / {
    auth_basic "Administrator Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

21. 缓存

Nginx可以缓存来自后端服务器的响应,以加快对同一请求的响应速度,减轻后端服务器的负担。

proxy_cache_path /path/to/cache levels=1:2 keys_zone=MYCACHE:30m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

server {
    location / {
        proxy_cache MYCACHE;
        proxy_pass http://backend;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/962122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【文心一言大模型插件制作初体验】制作面试错题本大模型插件

文心一言插件开发初体验 效果图 注意:目前插件仅支持在本地运行,虽然只能自用,但仍然是一个不错的选择。(什么?你说没有用?这不可能!文心一言app可以支持语音,网页端结合手机端就可…

【算法与数据结构】654、LeetCode最大二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树这两道题有些类似,相关代…

Anaconda虚拟环境下导入opencv

文章目录 解决方法测试 解决方法 1、根据自己虚拟环境对于的python版本与电脑对应的位长选择具体的版本,例如python3.9选择cp39,64位电脑选择64 下载地址:资源地址 若是不确定自己虚拟环境对应的python版本,可以输入下列命令&…

【启扬方案】启扬多尺寸安卓屏一体机,助力仓储物料管理系统智能化管理

随着企业供应链管理的不断发展,对仓储物料管理的要求日益提高。企业需要实时追踪和管理物料的流动,提高物流效率、降低库存成本和减少库存的风险。因此,仓储物料管理系统的实现成为必要的手段。 仓储物料管理系统一体机作为一种新型的物料管理…

Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

- 网络通信 概念:网络通信是指通过计算机网络进行信息传输的过程,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准…

【STM32】SPI初步使用 读写FLASH W25Q64

硬件连接 (1) SS( Slave Select):从设备选择信号线,常称为片选信号线,每个从设备都有独立的这一条 NSS 信号线,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中,即…

0.96寸IIC-OLED屏幕

文章目录 一、硬件介绍1.1 0.96寸IIC-OLED屏幕1.2 主控1.3 取模工具 二、软件程序2.1 oled.c2.2 oled.h2.3 font.c2.4 font.h 一、硬件介绍 1.1 0.96寸IIC-OLED屏幕 1.2 主控 使用stm32f103c8t6单片机进行控制, IIC驱动使用软件模拟的方式。 1.3 取模工具 文字取模工具&…

算法通关村第10关【青铜】| 快速排序各种写法

思路: 指定一个数字,将数组比他小的放到左边,比他大的放到右边,实现归位 然后再指定一个数字递归,一直遍历完数组 最好的情况每次指定的都是中间位置的数字,划分完后两边长度相等,2T(n/2) O…

解决crosstalk的方法及原理分析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 crosstalk是干扰线与受绕线之间由于信号跳变产生的耦合电容引起的。 解决crosstalk的方法从两方面入手,一方面降低耦合电容,一方面降低timing window的overlap。 静态时序分析: 串扰延迟分析 以…

Ubuntu入门05——磁盘管理与备份压缩

1.检查磁盘空间占用情况 2.统计目录或文件所占磁盘空间大小 3.压缩 3.1 zip、unzip和zipinfo 运行时发现上面命令不成功,换成: (将文件lkw放入压缩文件lkw01.zip中) sudo zip -m lkw01.zip lkw 解压文件: 实操&…

从RESP的角度理解事务和管道

1. RESP 是什么? 16 进制 0d 0a 就是 \r\n。 RESP 就是 Redis 服务端和客户端之间进行通信的协议,它是建立在 TCP 之上的一种简单的应用层协议。你可以把它理解成 HTTP 协议,不过它更加的简单。 它支持很多数据类型,这里列举几…

企业数字化转型的关键技术有哪些?_光点科技

随着科技的不断进步和信息技术的快速发展,企业数字化转型已经成为保持竞争力和适应市场变化的关键举措。在这个数字化时代,企业需要借助先进的技术来优化业务流程、提升效率,以及更好地满足客户需求。以下是企业数字化转型过程中的关键技术。…

4V-28V Vin,6A同步降压DCDC变换器,集成3.3V和150mA LDO——SCT2361FPBR

SCT2361是一种高效率的同步降压型DC-DC变换器,集成3.3V和150mA LDO。输入电压范围为4V-28V,输出电压可调为0.6V,具有3mmx3mm的小QFN封装,可提供连续6A的输出电流。该器件将高、低压侧功率mosfet集成,使导通损耗降到最低…

某次护网红队getshell的经历

信息收集 某企业提供信息:企业官网的真实外网ip,内网ip 企业官网比较硬,从控股超过51%的子公司入手 通过企查查找到一堆控股高的子公司,通过ICP/IP地址/域名信息备案管理系统查找子公司官网,收集二级域名。通过google…

Linux 调试技术 Kprobe

目录 用途:一、技术背景1.1 kprobes的特点与使用限制1.2 kprobe原理 二、 基于kprobe探测模块的探测方式2.1、struct kprobe结构体2.2 kprobe API函数2.3 示例代码参考资料: 用途: 判断内核函数是否被调用,获取调用上下文、入参以…

『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段

『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段 基于 2.2.9.RELEASE问题:当方法进行了注释标记之后,springboot 又是怎么注入到容器中并创建类呢? 首先创建测试主程序 package …

第49节:cesium 倾斜模型osgb转3dtiles,并加载(含源码+视频)

结果示例: 完整步骤: 1、启动并登陆cesiumlab 2、准备OSGB模型数据(含下载地址) 链接:https://pan.quark.cn/s/46ac7b0b2bed 提取码:TvWL3、倾斜模型切片 选择倾斜模型data文件夹 空间参考、零点坐标 默认 强制双面关闭、无光照 打开

天津和则百顺国际贸易有限公司被选为中国自主创新企业

在2023年4月,天津和则百顺国际贸易有限公司凭借在全国自主创新企业宣传推广活动中的出色表现,经过相关单位审核,正式被评选为中国自主创新企业,并荣获《中国自主创新企业》荣誉证书。 作为始终走在中国自主创新前沿的企业,天津和则百顺国际贸易有限公司,以下简称和则百顺,对于获…

console.log封装,显示调用的位置

背景 一般我们都哦说直接调用console.log,但是有时候console.log太多了,非常影响效率,我们想统一开启console.log(不是生产环境移除console.log) 可能封装的代码是这样 window.mylog()>conosle.log但是控制面板哪…

【大数据】Flink 详解(六):源码篇 Ⅰ

Flink 详解(六):源码篇 Ⅰ 55、Flink 作业的提交流程?56、Flink 作业提交分为几种方式?57、Flink JobGraph 是在什么时候生成的?58、那在 JobGraph 提交集群之前都经历哪些过程?59、看你提到 Pi…