nginx扩展篇之nginx.conf 详细文档

news2024/10/6 8:39:08

nginx.conf 配置文件

基本说明

Nginx 的配置文件位置

  1. 文件位置

​ 安装目录\conf\nginx.conf

​ 安装目录\nginx.conf

  1. 两个文件是一样的

多说一句:使用/usr/local/nginx/sbin/nginx 启动Nginx ,默认用的是安装目录\nginx.conf 配置文件

作用:完成对Nginx 的各种配置,包括端口,并发数,重写规则等

nginx.conf 组成

  1. 全局块

  2. events 块

  3. http 块

nginx.conf 详细文档

  1. 地址: 文档:https://blog.csdn.net/liuchang19950703/article/details/110792007
  2. 文档: Nginx 配置文件nginx.conf 详解.docx
  3. 详细内容
#Nginx 用户及组:用户组。window 下不指定
#user nobody;
#工作进程:数目。根据硬件调整,通常等于CPU 数量或者2 倍于CPU。
worker_processes 1;
#错误日志:存放路径。
#error_log logs/error.log;

#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid(进程标识符):存放路径
pid /usr/local/nginx/logs/nginx.pid;
#一个进程能打开的文件描述符最大值,理论上该值因该是最多能打开的文件数除以进程数。
#但是由于nginx 负载并不是完全均衡的,所以这个值最好等于最多能打开的文件数。
#LINUX 系统可以执行sysctl -a | grep fs.file 可以看到linux 文件描述符。
worker_rlimit_nofile 65535;
events {
#使用epoll 的I/O 模型。linux 建议epoll,FreeBSD 建议采用kqueue,window 下不指定。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
#客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,
#一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
#client_header_buffer_size 4k;
}
http {
#设定mime 类型,类型由mime.type 文件定义
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"';
#用了log_format 指令设置了日志格式之后,需要用access_log 指令指定日志文件的存放路径
#记录了哪些用户,哪些页面以及用户浏览器、ip 和其他的访问信息
#access_log logs/host.access.log main;
#access_log logs/host.access.404.log log404;
#服务器名字的hash 表大小
server_names_hash_bucket_size 128;
#客户端请求头缓冲大小。
#nginx 默认会用client_header_buffer_size 这个buffer 来读取header 值,
#如果header 过大,它会使用large_client_header_buffers 来读取。
#如果设置过小HTTP 头/Cookie 过大会报400 错误nginx 400 bad request
#如果超过buffer,就会报HTTP 414 错误(URI Too Long)
#nginx 接受最长的HTTP 头部大小必须比其中一个buffer 大
#否则就会报400 的HTTP 错误(Bad Request)
#client_header_buffer_size 32k;
#large_client_header_buffers 4 32k;
#隐藏ngnix 版本号
#server_tokens off;
#忽略不合法的请求头
#ignore_invalid_headers on;
#让nginx 在处理自己内部重定向时不默认使用server_name 设置中的第一个域名
#server_name_in_redirect off;

#客户端请求体的大小
#client_body_buffer_size 8m;
#开启文件传输,一般应用都应设置为on;若是有下载的应用,则可以设置成off 来平衡网络I/O 和磁盘的I/O 来降低系统负
载
sendfile on;
#告诉nginx 在一个数据包里发送所有头文件,而不一个接一个的发送。
#tcp_nopush on;
#tcp_nodelay off 会增加通信的延时,但是会提高带宽利用率。在高延时、数据量大的通信场景中应该会有不错的效果
#tcp_nodelay on,会增加小包的数量,但是可以提高响应速度。在及时性高的通信场景中应该会有不错的效果
tcp_nodelay on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
#gzip 模块设置,使用gzip 压缩可以降低网站带宽消耗,同时提升访问速度。
#gzip on; #开启gzip
#gzip_min_length 1k; #最小压缩大小
#gzip_buffers 4 16k; #压缩缓冲区
#gzip_http_version 1.0; #压缩版本
#gzip_comp_level 2; #压缩等级
#gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml
application/xml+rss;#压缩类型

#负载均衡
#max_fails 为允许请求失败的次数,默认为1
#weight 为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率。
# upstream myServer{
# server 192.168.247.129:8080 max_fails=3 weight=2;
# server 192.168.247.129:8081 max_fails=3 weight=4;
# }
#server {
# listen 80;
#
# #IP/域名可以有多个,用空格隔开
# server_name 192.168.247.129;
# #server_name www.test.com;
#
# #charset koi8-r;
#
# #access_log logs/host.access.log main;
#
# #反向代理配置,
# #将所有请求为www.test.com 的请求全部转发到upstream 中定义的目标服务器中。
# location / {
#
# #此处配置的域名必须与upstream 的域名一致,才能转发。
# proxy_pass http://myServer;
# #proxy_pass http://192.168.247.129:8080;
#
# proxy_connect_timeout 20; #nginx 跟后端服务器连接超时时间(代理连接超时)

#
# #client_max_body_size 10m; #允许客户端请求的最大单文件字节数
# #client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
# #proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
# #proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
# #proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
# #proxy_buffers 4 32k; #proxy_buffers 缓冲区,网页平均在32k 以下的话,这样设置
# #proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
# #proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream 服务器传
#
# root html;
#
# #定义首页索引文件的名称
# index index.html index.htm;
# }
#
# #动静分离静态资源走linux 动态资源走tomcat
# # 注意/source/image/下面寻找资源
# location /image/ {
# root /source/;
# autoindex on;
# }
#
#
# # 出现50x 错误时,使用/50x.html 页返回给客户端
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
#}

#下面是配置生产环境中既支持HTTP 又支持HTTPS,保证用户在浏览器中输入HTTP 也能正常访问
# SSL 证书配置
ssl_certificate cert/yphtoy.com.pem; #加密证书路径
ssl_certificate_key cert/yphtoy.com.key; #加密私钥路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #加密协议
ssl_session_cache shared:SSL:1m; #加密访问缓存设置,可以大大提高访问速度
ssl_session_timeout 10m; #加密访问缓存过期时间
ssl_ciphers HIGH:!aNULL:!MD5; #加密算法
ssl_prefer_server_ciphers on; #是否由服务器决定采用哪种加密算法
# 负载均衡
upstream api_upstream
{
server 127.0.0.1:8080 max_fails=3 weight=1;
server 127.0.0.1:8081 max_fails=3 weight=1;
}
#api 接口(兼容HTTP)
server{
listen 80;
server_name api.test.com;
# 301 重定向跳转到HTTPS 接口
return 301 https://$server_name$request_uri;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#api 接口(兼容HTTPS)

server{
listen 443 ssl;
server_name api.test.com;
location / {
root html;
index index.html index.htm;
proxy_pass http://api_upstream;
#语法: proxy_cookie_path oldpath replacepath;
#oldpath 就是你要替换的路径replacepath 就是要替换的值
#作用:同一个web 服务器下面多个应用之间能获取到cookie
proxy_cookie_path /api/ /;
#服务端接收的请求头Cooke 值不变
proxy_set_header Cookie $http_cookie;
}
}
#管理后台端(兼容HTTP)
server{
listen 80;
server_name manage.test.com;
# 301 重定向跳转到HTTPS 接口
return 301 https://$server_name/$request_uri;
error_page 500 502 503 504 /50x.html;
location = /50x.html{
root html
}
}
#管理后台端(兼容HTTPS)
server{

listen 443 ssl;
server_name manage.test.com;
location / {
root /home/test/web/dist
index /index.html;
#语法:try_files 【$uri】【$uri/】【参数】
#当用户请求https://manage.test.com/login 时,
#一.如果配置了上面的默认index,会依次请求
#1./home/test/web/dist/login 查找有没有login 这个文件,没有的话
#2./home/test/web/dist/index.html 有就直接返回
#二.如果没有配置了上面的默认index 或者配置了没有找到对应的资源,会依次请求
#1./home/test/web/dist/login 查找有没有login 这个文件,没有的话
#2./home/test/web/dist/login/ 查找有没有login 这个目录,没有的话
#3.请求https://manage.test.com/index.html nginx 内部做了一个子请求
#三.总的来说,index 的优先级比try_files 高,请求会先去找index 配置,这里最后一个参数必须存在
try_files $uri $uri/ /index.html;
#解决跨域问题
#允许跨域请求地址(*表示全部,但是无法满足带cookie 请求,因为cookie 只能在当前域请求)
add_header Access-Control-Allow-Origin $http_origin;
#允许接收cookie 和发送cookie
add_header Access-Control-Allow-Credentials 'true';
#允许请求的方法
add_header Access-Control-Allow-Methods 'GET,POST,DELETE,PUT,OPTIONS';
#允许请求头(Content-Type:请求数据/媒体类型x-requested-with:判断请求是异步还是同步自定义header 比如token)
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
#浏览器缓存请求头信息,1800 秒内,只会有1 次请求,不会出现"OPTIONS"预请求,节约资源
#add_header Access-Control-Max-Age '1800';
if ($request_method = 'OPTIONS') {
return 204;
}
#服务端HttpServletRequest 可以获得用户的真实ip
proxy_set_header X-Real-IP $remote_addr;
#服务端HttpServletRequest 可以获得用户的真实ip 和经过的每一层代理服务器的ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#服务端接收的请求头Host 值不变
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
}
}
}

nginx.conf 讲解

一张图说明nginx.conf 结构

在这里插入图片描述

看一下/usr/local3/nginx/conf/nginx.conf

    #user nobody;
    
    worker_processes 1;
    
    #error_log logs/error.log;
    
    #error_log logs/error.log notice;

    #error_log logs/error.log info;
    
    #pid logs/nginx.pid;
    
    events {
    	worker_connections 1024;
    }
    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;

            #tcp_nopush		 on;
            
            #keepalive_timeout		 0;
            
            keepalive_timeout 		65;
            
            #gzip on;
            
            server {
      		  listen 80;
      		  
                    server_name localhost;
                    
                    #charset koi8-r;
                    
                    #access_log logs/host.access.log main;
                    
                    location / {
                            root html;
                            
                            index index.html index.htm;
            }
            #error_page 404 /404.html;

            # redirect server error pages to the static page /50x.html
            #
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
              root html;
            }
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            # proxy_pass http://127.0.0.1;
            #}

            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #

            #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;
            #}
            # 	deny access to .htaccess files, if Apache's document root

            # 	concurs with nginx's one
            #

            #location ~ /\.ht {
            # 	deny all;
            #}
        }


        # another virtual host using mix of IP-, name-, and port-based configuration

        #
        #server {
        	#	 listen	 8000;

                #	 listen	 somename:8080;

                #	 server_name somename  alias  another.alias;

                #	 location / {
                # 		root html;
                #		 index index.html index.htm;
                #	 }
                #}

        # 	HTTPS server
        #

        #server {
                #       listen 		443 ssl;
                # 	  server_name	 localhost;

                # 	  ssl_certificate	 cert.pem;

                #	 ssl_certificate_key 	cert.key;

                # 	  ssl_session_cache 	shared:SSL:1m;

                # 	  ssl_session_timeout 	5m;

            #	 ssl_ciphers 	HIGH:!aNULL:!MD5;

            # 	   ssl_prefer_server_ciphers 	on;

            #	 location / {
            #		 root html;
            # 		index index.html index.htm;
            #	 }
            #}


}

全局块

说明

  1. 从配置文件开始到events 块之间的内容
  2. 主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process 数,进程PID 存放路径、日志存放路径和类型以及配置文件的引入等

简单分析

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

配置举例:

worker_processes 1;

events 块

说明

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

简单分析

1、上述例子就表示每个work process 支持的最大连接数为1024, 这部分的配置对Nginx 的性能影响较大,在实际中应根据实际情况配置

配置举例

events {
	worker_connections 1024;
}

http 块

说明

  1. 这是Nginx 服务器配置中最复杂的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
  2. http 块也可以包括http 全局块、server 块

http 全局块

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

配置举例:

http {
	include mime.types;
        default_type application/octet-stream;
        
        #开启文件传输
        sendfile on;
        #tcp_nopush on;
        #keepalive_timeout 0;
        
	keepalive_timeout 65;
}

server 块

  1. 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
  2. 每个http 块可以包括多个server 块,而每个server 块就相当于一个虚拟主机。
  3. 每个server 块也分为全局server 块,以及可以同时包含多个location 块。

全局server 块

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

location 块

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

server {
            listen 80;
            server_name localhost;
            #charset koi8-r;
            #access_log logs/host.access.log main;

            location / {
                    root html;
                    index index.html index.htm;
            }
            
            #error_page 404 /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page 500 502 503 504 /50x.html;
            
            location = /50x.html {
           		 root html;
        }
}

name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;

        location / {
                root html;
                index index.html index.htm;
        }
        
        #error_page 404 /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        
        location = /50x.html {
       		 root html;
    }

}


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

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

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

相关文章

网络安全学术顶会——SP 2023 议题清单、摘要与总结(上)

总结 本文总结了196篇近期涉及网络安全领域的研究论文。主要可分为以下几类: 隐私保护,涉及到匿名认证、隐私保护机器学习等机器学习安全,主要研究对抗样本和隐蔽后门等问题浏览器和网络安全,涉及指纹识别、端到端加密、网站选择标志等嵌入式系统安全,主要针对 IOT 安全操作系统…

java并发编程:LinkedBlockingQueue详解

文章目录 简介源码分析属性构造函数入队方法put(E e)offer(E e)offer(E e, long timeout, TimeUnit unit) 出队方法take()poll()获取元素方法删除元素方法 问题总结 简介 在集合框架里,想必大家都用过ArrayList和LinkedList,也经常在面试中问到他们之间…

光线追踪RayTracing,基本原理,判断物体与光线相交

光线的三点假设: 光线按直线传播光线之间不会发生碰撞光线会经过一系列折射反射进入摄像机 可以从摄像机发出光线,推出可逆的光路 上图中,透明球在与相机直连的线条处,需要将折射和反射的着色点结果相加,如果有光源直…

Neuroimage | LMDA-Net第一作者亲自讲述其设计思想

近期, 天津大学精仪学院和医工院联合,在神经科学和神经成像顶刊 Neuroimage中发表题为《LMDA-Net: 一种具有通用性和可解释性的轻量级EEG解码网络》的学术论文, 为解决人工神经网络模型在EEG解码时面临的跨数据集泛化性差、预测波动性高和模型可解释性差…

【2023】Redis cluster集群模式搭建

目录 1.cluster集群介绍2.搭建cluster集群2.1.架构图2.2.搭建集群2.2.1.创建所需配置文件2.2.2.创建集群所需容器2.2.3.创建集群:master1节点连接其他节点2.2.4.配置从节点,完成三主三从 3.在cluster集群内读写数据 1.cluster集群介绍 Redis Cluster是R…

每个程序员都必须知道的8种通用数据结构

8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和…

GitOps多环境部署问题及解决方案

大型组织应用GitOps难免会遇到在多环境中部署的问题,本文分析了应用环境分支策略会遇到到问题,介绍了应用文件夹策略解决这些问题的方案。原文:Stop Using Branches for Deploying to Different GitOps Environments[1], How to Model Your G…

STC8比较器功能案例介绍

STC8比较器功能案例介绍 📌相关篇《STC8功能脚切换相关寄存器P_SW1和P_SW2以及MCLKOCR介绍》 📋基于内部参考电压源,使用外部端口P3.7作为比较器正极输入源,比较器结果输出到P3.4 或者P4.1(由P_SW2 中的CMPO_S 进行设定…

Oracle的最高认证并不是OCM,而是......

什么是Oracle数据库的最高认证呢?大家注意,不是Oracle OCM,而是Oracle高可用大师认证,全称叫:Maxium Availability Certified Master,要获得这一张证书,你需要同时有5个认证。 关于博主&#x…

Prompt 用法大全!让 ChatGPT 更智能的六种策略(中)

如果遵循以下六种策略来构建 Prompt 提示词,在和 ChatGPT 对话中我们将获得更好、更符合我们要求的回答。 这些策略,后几种更适合在编程调用 ChatGPT API 时使用,不过也适用直接和 ChatGPT 对话,让它更好的理解我们的意图。 1、写…

8.DIY可视化-拖拽设计1天搞定主流小程序-小程序首页幻灯片显示

小程序首页幻灯片显示 本教程均在第一节中项目启动下操作 小程序首页幻灯片显示前言一、添加组件: 图片轮播公告图文菜单二. 绑定幻灯片数据接口三:首页绑定接口数据:1.绑定字段 四.导出源码,解压后,导入hbulider,运行查看效果1.导出源码:2.解压,导入hbuilder 五.运行查看效果对…

Ae:蒙版插值面板

Ae菜单:窗口/蒙版插值 Mask Interpolation 蒙版插值Mask Interpolation面板可用于自动创建蒙版路径 Mask Path属性的关键帧,从而实现更平滑逼真的路径动画。 至少选择 2 个连续的蒙版路径关键帧后,智能蒙版插值将基于面板上的选项设置创建中间…

Qt5.12.6配置Android Arm开发环境(Linux)

1.安装jdk 2.安装android studio 3.安装sdk 与ndk 设置代理 安装SDK工具 安装SDK Platform 安装QT 选择JDK 1.8安装路径,SDK与NDK路径 如出现Platform SDK或者Platform Build Tools未安装,点击Update Installed 配置成功后可看到ARMv7与AMD-v8a kits Qt Version也可看到ARM…

既然有了HTTP,为什么还要RPC?

文章目录 HTTP和RPC区别RPC(Remote Procedure Call)服务流行的RPC框架 HTTP服务Restful RPC接口和HTTP接口的区别与联系传输协议传输效率性能消耗负载均衡服务治理(下游服务新增,重启,下线时如何不影响上游调用者&…

Java012——Java引用数据类型String的简单学习

回顾Java数据类型 本次要学习的是Java引用数据类型String 一、对String类简单说明 说明:String是Java中的一个类 二、String类的作用 作用:主要用来创建和操作字符串。 三、使用String类 3.1、创建字符串 注意: 1、字符串使用双引号&qu…

基于Springboot+vue+协同过滤+前后端分离+鲜花商城推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离鲜花商城推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载: 链接:https://pan.baidu.com/s/1mf2rsB_g1DutFEXH0bPCdA 提取码:8888 【运行环境】Idea JDK1.8 Maven MySQL…

【网络原理】TCP/IP协议五层模型

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …

Linux基础内容(22)—— 信号

Linux基础内容(21)—— 进程消息队列和信号量_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130770830?spm1001.2014.3001.5501 目录 1.定义 1.介绍 2.解释 例子 操作系统信号 实现的大致思路 2.信号的产生方式 …

【C语言】计算含多种运算符的表达式

计算含多种运算符的表达式 引入运算符的优先级算术表达式的运算规则引例例题 引入 诸如下面这些表达式,它的计算过程,计算顺序是怎样的?计算结果为多少? 今天我们就一起来解决一下这个问题吧! 运算符的优先级 解决…

6.数据结构期末复习之查找和排序1

概念 静态查找: 无插入和删除 动态查找: 边插入删除边查找静态和动态查找的实现方式 1.线性表: 静态查 2.树表(二叉排序树)动态查 3.散列表 静态动态都可以查找: 集合中查找满足条件的数据关键码 1.主关键码:可以表标识数据唯一性 2.次关键码: 不能标识查找效率: 比较次数决定的…