Nginx配置文件全解:从入门到设计

Nginx配置文件全解:从入门到架构设计

1. Nginx配置文件基础

Nginx的主配置文件通常位于/etc/nginx/nginx.conf​。配置文件使用简单的文本格式,由指令和指令块组成。

1.1 基本语法规则

  • 每个指令以分号(;)结束
  • 指令块用大括号({})包围
  • 配置文件支持使用#添加注释

1.2 基本结构

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/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 on;keepalive_timeout 65;include /etc/nginx/conf.d/*.conf;
}

2. 主要配置块

2.1 全局块

位于配置文件最顶层的指令,影响Nginx的全局行为。

主要指令:

  • user​: 指定Nginx worker进程的用户
  • worker_processes​: 指定Nginx worker进程的数量
  • error_log​: 指定错误日志的位置和级别
  • pid​: 指定存储主进程ID的文件位置

2.2 events块

配置影响Nginx处理连接的指令。

主要指令:

  • worker_connections​: 指定每个worker进程的最大连接数
  • use​: 指定使用的事件模型(如epoll, kqueue等)

2.3 http块

包含HTTP服务器相关的配置。

主要指令:

  • include​: 引入其他配置文件
  • default_type​: 指定默认MIME类型
  • log_format​: 定义日志格式
  • access_log​: 指定访问日志的位置和格式

3. HTTP服务器配置

在http块内,可以定义一个或多个server块,每个代表一个虚拟主机。

http {server {listen 80;server_name example.com;root /var/www/example.com;index index.html;location / {try_files $uri $uri/ =404;}}
}

主要指令:

  • listen​: 指定服务器监听的IP地址和端口
  • server_name​: 指定服务器名称(域名)
  • root​: 指定网站根目录
  • index​: 指定默认索引文件

4. Location块详解

Location块用于匹配特定的URI请求。

location / {try_files $uri $uri/ /index.php?$query_string;
}location ~* \.(jpg|jpeg|png|gif)$ {expires 30d;
}

匹配规则:

  • =​: 精确匹配
  • ^~​: 优先级最高的前缀匹配
  • ~​: 区分大小写的正则匹配
  • ~*​: 不区分大小写的正则匹配
  • /​: 通用前缀匹配

主要指令:

  • try_files​: 按顺序检查文件是否存在
  • rewrite​: 重写URL
  • return​: 返回特定的HTTP状态码

5. 反向代理和负载均衡

Nginx可以作为反向代理服务器和负载均衡器。

5.1 反向代理配置

server {listen 80;server_name example.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

5.2 负载均衡配置

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

负载均衡算法:

  • 轮询(默认)
  • 权重
  • ip_hash
  • least_conn

6. HTTPS和SSL/TLS配置

配置HTTPS需要SSL/TLS证书。以下是一个基本的HTTPS服务器配置:

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/certificate.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;# ... 其他配置 ...
}

主要指令:

  • ssl_certificate​: 指定SSL证书文件路径
  • ssl_certificate_key​: 指定SSL证书私钥文件路径
  • ssl_protocols​: 指定支持的SSL/TLS协议版本
  • ssl_ciphers​: 指定支持的加密算法

7. 性能优化配置

7.1 启用Gzip压缩

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

7.2 配置缓存

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";
}

7.3 启用FastCGI缓存

fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {# ...location ~ \.php$ {fastcgi_cache my_cache;fastcgi_cache_valid 200 60m;# ... 其他FastCGI配置 ...}
}

8. 安全性配置

8.1 隐藏Nginx版本信息

server_tokens off;

8.2 配置X-Frame-Options防止点击劫持

add_header X-Frame-Options "SAMEORIGIN";

8.3 配置内容安全策略(CSP)

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";

9. 高级功能和模块

9.1 HTTP/2支持

server {listen 443 ssl http2;# ... 其他配置 ...
}

9.2 WebSocket支持

location /wsapp/ {proxy_pass http://wsbackend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}

9.3 动态模块

Nginx支持动态加载模块,可以在运行时启用或禁用某些功能。

load_module modules/ngx_http_image_filter_module.so;

10. 最佳实践和架构设计

10.1 模块化配置

将配置文件分割成多个小文件,便于管理和维护。

http {include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

10.2 使用环境变量

使用环境变量可以使配置更加灵活,适应不同的部署环境。

server {server_name ${NGINX_SERVER_NAME};root ${NGINX_DOC_ROOT};# ... 其他配置 ...
}

10.3 多阶段架构设计

对于大型项目,可以采用多阶段的Nginx架构:

  1. 前端负载均衡层
  2. 应用层
  3. 静态资源层
  4. 后端服务层
客户端
前端负载均衡Nginx
应用Nginx 1
应用Nginx 2
静态资源Nginx
后端服务1
后端服务2

这种架构可以提供更好的扩展性和性能。

10.4 监控和日志

配置适当的监控和日志对于维护高可用性系统至关重要。

log_format detailed_log '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''$request_time $upstream_response_time $pipe';access_log /var/log/nginx/detailed_access.log detailed_log;

结合工具如ELK栈(Elasticsearch, Logstash, Kibana)可以更好地分析和可视化日志数据。

结语

Nginx的配置文件是一个强大而灵活的工具,掌握它可以让你构建高性能、安全和可扩展的Web应用架构。本指南涵盖了从基础到高级的多个方面,但Nginx的功能远不止于此。持续学习和实践是成为Nginx配置专家的关键。

希望这个全面的指南能帮助你更好地理解和使用Nginx配置文件。如果你有任何问题或需要进一步的说明,请随时询问!

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

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

相关文章

多方SQL计算场景下,如何达成双方共识,确认多方计算作业的安全性

安全多方计算在SQL场景下的限制 随着MPC、隐私计算等概念的流行, 诸多政府机构、金融企业开始考虑参与到多方计算的场景中, 扩展数据的应用价值。 以下面这个场景为例, 银行可能希望获取水电局和税务局的数据,来综合计算得到各…

DolphinScheduler-3.1.9 资源中心实践

前言 目前DolphinScheduler最新的稳定版本是 3.1.9 ,基于此做些探索,逐渐深化学习路径,以便于加深理解。 3.2.1 是最新的版本。目前的稳定版本是 3.1.9 基础环境:Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地伪分布式安装…

学习笔记——动态路由——IS-IS中间系统到中间系统(开销)

四、IS-IS开销 1、IS-IS 开销简介 在IS-IS协议刚面世时,互联网网络结构还非常简单,因此IS-IS早期的版本中只使用了6bit来描述链路开销,链路开销的取值范围是1-63。一条路由的开销范围只有10bit,取值范围是0-1023。 随着计…

前端实现无缝自动滚动动画

1. 前言: 前端使用HTMLCSS实现一个无缝滚动的列表效果 示例图: 2. 源码 html部分源码: <!--* Author: wangZhiyu <w3209605851163.com>* Date: 2024-07-05 23:33:20* LastEditTime: 2024-07-05 23:49:09* LastEditors: wangZhiyu <w3209605851163.com>* File…

【ubuntu】安装(升级)显卡驱动,黑屏|双屏无法使用问题解决方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 ubuntu 安装(升级)显卡驱动&#xff0c;黑屏|双屏无法使用问题解决方法 由于项目需要&#xff0c;对显卡驱动进行升级。升级完就黑屏。。。。&#xff0…

Fast R-CNN(论文阅读)

论文名&#xff1a;Fast R-CNN 论文作者&#xff1a;Ross Girshick 期刊/会议名&#xff1a;ICCV 2015 发表时间&#xff1a;2015-9 ​论文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源码&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

WordPress禁止用户注册某些用户名

不管在任何网站&#xff0c;用户注册时都有一个屏蔽非法关键词&#xff0c;就是禁止注册某些用户名&#xff0c;原因是因为防止用户使用一些特定的用户名&#xff0c;例如管理员、官方等用户名&#xff0c;还有就是那些攻击性的词语了。 加网站添加了屏蔽非法关键词&#xff0…

BAT-致敬精简

什么是bat bat是windows的批处理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我们可以出通过 winR键来打开指令窗口&#xff0c;这里输入的就是bat指令 这里就是bat界面 节约时间就是珍爱生命--你能想象以下2分钟的操作&#xff0c;bat只需要1秒钟 我…

考虑数据库粒度的设计-提升效率

目录 概要 场景 设计思路 小结 概要 公开的资料显示&#xff0c;数据库粒度是&#xff1a;“在数据库领域&#xff0c;特别是数据仓库的设计中&#xff0c;粒度是一个核心概念&#xff0c;它直接影响到数据分析的准确性和存储效率。粒度的设定涉及到数据的详细程度和精度&…

【JVM基础篇】Java的四种垃圾回收算法介绍

文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法&#xff08;标记压缩算法&#xff09;优缺点 分代垃圾回收算法&#xff08;常用&#xff09;JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…

【SpringBoot】IDEA查看spring bean的依赖关系

前因&#xff1a;在研究springcloud config组件时&#xff0c;我发现config-server包下的EnvironmentController可以响应客户端的请求&#xff0c;但EnvironmentController并不在启动类所在的包路径下&#xff0c;所以我推测它是作为某个Bean方法在生效&#xff0c;寻找bean的依…

vue-router 源码分析——9.别名

这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行&#xff1a; 按官网的使用文档顺序&#xff0c;围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码&#xff0c;更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升&#xff0c;甚至面试时…

DAY1: 实习前期准备

文章目录 VS Code安装的插件C/CCMakeGitHub CopilotRemote-SSH收获 VS Code 下载链接&#xff1a;https://code.visualstudio.com 安装的插件 C/C 是什么&#xff1a;C/C IntelliSense, debugging, and code browsing. 为什么&#xff1a;初步了解如何在VS Code里使用C输出…

https创建证书

需要下载httpd模块&#xff1a;yum install httpd -y 前提需要先搭建一个虚拟主机来测试证书创建的效果&#xff0c;以下面www.hehe.com为例&#xff0c;可以参考创建&#xff1a; [rootlocalhost conf.d]# vim vhost.conf <directory /www> allowoverride none requi…

关于小爱同学自定义指令执行

1.前言 之前买了小爱同学音响&#xff0c;一直想让其让我的生活变得更智能&#xff0c;编写一些程序来完成一些自动化任务&#xff0c;但是经过搜索发现&#xff0c;官方开发者平台不能用了&#xff0c;寻找api阶段浪费了我很长时间。最后在github 开源项目发现了俩个比较关键…

13.SQL注入-宽字节

SQL注入-宽字节 含义&#xff1a; MySQL是用的PHP语言&#xff0c;然后PHP有addslashes()等函数&#xff0c;这类函数会自动过滤 ’ ‘’ null 等这些敏感字符&#xff0c;将它们转义成’ ‘’ \null&#xff1b;然后宽字节字符集比如GBK它会自动把两个字节的字符识别为一个汉…

内容营销专家刘鑫炜:网站排名需考虑哪些SEO优化技巧?

网站排名的SEO优化技巧包括&#xff1a; 1. 关键词研究&#xff1a;了解目标受众的搜索关键词&#xff0c;将这些关键词合理地应用在网站的标题、描述、正文和标签中&#xff0c;有助于提高网站排名。 2. 内容优化&#xff1a;创建高质量、有价值的内容&#xff0c;可以吸引搜…

Qt源码解析之QObject

省去大部分virtual和public方法后&#xff0c;Qobject主要剩下以下成员&#xff1a; //qobject.h class Q_CORE_EXPORT Qobject{Q_OBJECTQ_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged)Q_DECLARE_PRIVATE(QObject) public:Q_I…

STM32-OC输出比较和PWM

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. OC输出比较和PWM1.1 OC输出比较1.2 PWM&#xff08;脉冲宽度调制&#xff09;1.3 输出比较通道&#xff08;高级&#xff09;1.4 输出比较通道&#xff08;通用&#xff09;1.5 输出比较模式1.6 PWM基本结…

MATLAB常用语句总结7

MATLAB总结7&#xff1a;常见错误归纳 本篇专门用于记录一些应试技巧 文章目录 MATLAB总结7&#xff1a;常见错误归纳前言一、一些小定义和小技巧二、蒙塔卡罗求解方法1.函数的定义2.函数引用3.代码量较少的蒙塔卡罗 三、函数引用与多变量四、矩阵引用五、非线性函数&#xff…