Nginx:配置文件详解

news2025/4/15 17:49:09

一、Nginx配置文件

main配置段:全局配置

events段:定义event工作模式

http {}:定义http协议配置

支持使用变量:
        内置变量:模块会提供内建变脸定义
        自定义变量:set var_name value

二、 主配置段的指令

1、正常运行的必备配置

1、user USERNAME [GROUPNAME];            #指定运行worker进程的用户 和组,例如:user nginx nginx;

2、pid /path/to/pid_file;        #指定nginx的pid文件;

3、worker_rlimit_nofile;        #指定一个worker进程所能够打开的最大文件句柄数;

4、worker_rlimit_sigpending;         #指定每个用户能够发往worker的信号的数量;

2、优化性能相关的配置

1、worker_processes #:          #worker线程的个数;通常应该为物理CPU核心个数减1;

2、worker_cpu_affinity cpumask ...;

  •                     
  •                   CPUMASK
  •                         0001
  •                         0010
  •                         0100
  •                         1000 
  •                     例如: worker_cpu_affinity 00000001 00000010 00000100;

3、timer_resolution t ;           #  计时器解析度,降低此值,柯减少gettimeofday()系统调用次数

4、worker_priority nice;         #对应的nice值-20 - 19,优先级对应100-139

3、事件相关的配置

1、pt_mutex {on|off} ;        (互斥锁)内部调用用户 请求至各worker时用的负载均衡锁;on时表示能让多个worker轮流地、序列化地与响应新请求;

2、lock_file /path/to/lock_file ;         #accept_mutex用到的锁文件

3、accept_mutex_delay #ms;        #work进程繁忙时锁等待多长事件

4、use [epoll|rgsig|select|poll];;        #定义使用的事件模型;建议让Nginx自动选择;

5、worker_connections;        #每个worker进程所能够响应的最大并发请求数;

4、用于调试 

1、daemon {off|on};        #是否以守护进程的方式运行nginx,调试时应该设置为off

2、master_process {on|off};        #是否以master/worker模型来运行nginx

3、error_log /path/to/error_log level;        #错误日志文件及其级别;处于调试目的,可以使用debug级别,但此级别只有在编译nginx时手机用--with-debug选项才有效; 

三、Nginx作为Web服务器使用配置

http{}:由ngx_http_core_module模块来引入
配置格式


	    http配置:http core 配置一个静态web服务器
		ngx_http_core_module
		
		配置框架:
		http {
			upstream {
				.,..
			}
			
			server {
				listen IP:PORT;
				# 虚拟主机

				location /URL {
                    root "/path/to/dir"
                    ……
					if ...{
						...
					}

				}
			}     #每个Srever类似于httpd中的<VirtualHost>
			server {
				……
			}
		}

#注意:与httpd相关的指令仅能通够放置于http、server、location、upstream、if上下文指令仅应用于这5中上下文

 四、虚拟主机配置相关指令

1、server{}  定义一个虚拟主机

​

    server{
        listen 8080;
        server_name www.hongyang.com;
        root "/vhosts/web1";
        }

​

访问:

2、listen 监听端口

完整格式:listen address[:port] [default_server] ssl 
  backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
  rcvbuf=size:设定监听句柄的SO_RCVBUF参数;

​

    server{
        listen 8080;
        server_name www.hongyang.com;
        root "/vhosts/web1";
        }

​

3、server_name 主机名

​

    server{
        listen 8080;
        server_name www.hongyang.com;
        root "/vhosts/web1";
        }

​
#				(1) 先做精确匹配;www.hongyang.com: 
#				(2) 左侧通配符匹配,例如:*.hongyang.com; 
#				(3) 右侧通配符匹配,例如:www.*;
#				(4) 正则表达式匹配,例如: ~^.*\.hongyang\.com$
#				(5) default_server

4、root  Path 设置资源路径映射

root:用于指明请求的URL所对应的文档的根目录路径

	location /imag/ {
					root "/web/imgs/";
				}

5、location 根据用户请求的URL匹配定义的location

允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;

#					=: 精确匹配检查;
#					~: 正则表达式模式匹配,区分字符大小写;
#					~*:正则表达式模式 匹配,不区分字符大小写;
#					^~:URI的前半部分匹配,不检查正则表达式;

匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;

6、aliias path 用于配置段,定义路径别名

	location /imags/ {
					root "/web/imgs/";
				}

    #访问上面的地址就相当于访问
    # http://www.hongyang.com/imags/a.jpg --> /vhosts/web/images/a.jpg

	location /imags/ {
					alias /www/pictures/;
				}
    # http://www.hongyang.com/imags/a.jpg --> /www/pictures/a.jpg

#     注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;

7、index 默认页面配置


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

# 当index.html 没有影响的时候,就会用index.htm来响应

8、err_page  根据http状态码重定向错误页面


                
                location{
                       error_page  404   /404.html
            }
          

# 当index.html 没有影响的时候,就会用index.htm来响应
# =[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

                    location{
                       error_page  404 = 200  /404.html
            }
          

9、基于IP访问控制

  server{
        listen 8080;
        server_name www.hongyang.com;
  location{
                root "/vhosts/web1";
                # deny all;
                 allow 192.158.5.128/16;

           }
       }


# deny禁止哪些IP进行访问:格式 IP/Network
# allow允许哪些IP进行访问    格式 IP/NetWork

10、基于用户的访问控制

    server{
        listen 8080;
        server_name www.hongyang.com;

        location /  {
                root "/vhosts/web1";
                auth_basic "Only For VIP"
                auth_basic_user_file /app/nginx/users/.htpasswd;
                }
        }

# 自己生成密钥 需要安装htttpd
# htpasswd -c -m /app/nginx/users/.htpasswd tom

效果

11、SSL配置

#生成私钥->生成CA证书
# cd /etc/pki/CA
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
# touch serial index.txt
# echo 01 > serial

#生成Nginx私钥
# (umask 077; openssl genrsa -out nginx.key 1024)
# openssl req -new -key nginx.key -out nginx.csr

#使用CA证书签署
# openssl ca -in nginx.csr -out nginx.crt -days 3655

   server {
        listen       443 ssl;
        server_name  wwww.hongyang.com;

        ssl_certificate      /app/nginx/ssl/nginx.crt;
        ssl_certificate_key  /app/nginx/ssl/nginx.key;

        ssl_session_cache    shared:SSL:1m;  #会话中缓存放在什么位置,使用多大内存
        ssl_session_timeout  5m;                #超时时间

        ssl_ciphers  HIGH:!aNULL:!MD5; #使用那种加密方式
        ssl_prefer_server_ciphers  on;指定使用 SSLv3 和 TLS 协议时,服务器密码应优先于客户端密码。

        location / {
                root "/vhosts/web1";
        }
    }

}



Chrom浏览器导入nginx.crt证书后访问

12、stub_status 状态页

        location /status  {
                stub_status on;
                allow 192.168.0.0/16
                deny all;
                }
        }

#仅能用于location 中


Active connections: 2   # 当前所有处于打开状态的连接数
server accepts handled requests
 65 65 64 
#1、已经连接的连接数
#2、已经处理过的连接数
#3、已经处理过的请求数;在“保持连接”模式下,请求数量可能会多于连接数量

Reading: 0 Writing: 1 Waiting: 1
# Reading 正处于接收请求状态的连接数
# Writing 请求已经接收完成,正处于处理请求活发送响应的过程中的连接数
# Waiting 保持连接模式下,且处于活动状态的连接数


13、rewrite regex replacement flag URL重写标志

# rewirte ^/images/(.*\.jgp)$ /imgs/$1 break;
# 相当于访问:http://www.hongyang.com/imges/a/b/c/1.jpg --> http://www.hongyang.com/imgs/a/b/c/1.jpg

# flag
# last:一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是由User_Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
# break:一旦此rewrite规则重写完成后,由User_Agent对新的URL重新发起请求,且不在会被当前locationg内的任何rewrite规则所检查
# redirect:以302响应码(临时重定向)返回新的URL
# permanent: 以301响应码(永久重定向)返回新的URL



        location /  {
                root "/vhosts/web1";
                rewrite ^/bbs/(.*)$ /forum/$1 break;
                rewrite ^/bbs/(.*)$ https://www.hongyang.com/index.html redirect;
                }

14、if 上下文

# 语法 if (condition) {}
# 应用环境:server , location

# condition
# 1、变量名:
            变量值为空串,或者以“0” 开始,则为false; 其他的均为true
# 2、以变量为操作数构成的比较表达式
            可使用=(等于)、!=(不等于)类似的比较操作符进行测试
# 3、正则表达式的模式匹配检查
            ~:区分大小写的模式匹配检查
            ~*:不区分大小写的模式匹配检查
            !~和!~*:对上面两种的取反
# 4、测试路径为文件可能性:-f和!-f
# 5、测试指定路径为目录的可能性:-d, !-d
# 6、测试文件的存在性:-e, !-e
# 7、检查文件是否有执行权限:x, !-x



if ($http_user_agent ~* MSIE) {
    rewrite ^(.*)$ /mise/$1 break;    
}

15、防盗链

# refere 模块提供invalid_referer(不合法的)变量,valid_referer(合法的)
location ~* \.(jpg|gif|jpeg|png)$ {
        valid_referer none blocked www.hongyang.com
        if ($invalid_referer) {
                rewirte ^/ http://www.hongyang.com/403.html
        }
    }

16、定制访问日志格式


    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;


# 此处可用变量为nginx各模块内建变量

五、网络相关的配置

1、eepalive_timeout time;     #保持连接的超时时长,默认为75s;
2、keepalive_requests;     #在一次保持连接上允许承载最大资源请求数;
3、keepalive_disable [msie6|safari|none];   #为指定类型的浏览器禁用长连接;
4、tcp_nodelay on|off;    #对长连接是否使用TCP_NODELAY选项;(TCP开销比较大,所以TCP在拥塞算法上对开销较小的请求合并成一次请求,延迟响应)
5、client_header_timeout time;    #读取http请求报文首部的超时时长;
6、client_body_timeout time;    #读取http请求报文body部分的超时时长;
7、send_timeout time;    #发送响应报文的超时时长;

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

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

相关文章

动态规划学习——斐波那契数列

目录 最长的斐波那契数列子序列的长度 1.题目 2.题目接口 3.解题思路及其代码 最长的斐波那契数列子序列的长度 1.题目 如果序列x_1&#xff0c;X_2&#xff0c;...&#xff0c;x_n 满足下列条件&#xff0c;就说它是斐波那契式的: 1.n > 3 2.对于所有i2 <n&a…

中间件介绍

一、中间件介绍 官方的说法&#xff1a;中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统&#xff0c;用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局&#xff0c;所以需…

HashMap的实现原;HashMap的工作原理;HashMap存储结构; HashMap 构造函数

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 HashMap是我们在工作中使用到存储数据特别频繁的数据结构&am…

韵达快递查询,韵达快递单号查询,一键筛选出单号中的退回件

批量查询韵达快递单号的物流信息&#xff0c;并将其中的退回件一键筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff…

短期的规划

大方向&#xff1a; 学习编程的前期 大二上学期&#xff1a; 前期追求知识点的广度&#xff1a; 对各类数据结构的了解 熟悉数据库的各类操作&#xff0c;JDBC熟练使用 与此同时&#xff0c;提高写作能力&#xff0c;学习沉淀&#xff0c;提高技术影响力 大二的寒假&…

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后&#xff0c;发现异常的知识是多么的吸引人&#xff01;不仅可以用来标记错误&#xff0c;还可以自己定义一个异常&#xff0c;用来实现自己想完成的业务逻辑&#xff0c;接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《前景导向的主动配电网智能储能软开关规划方法》

这个标题涉及到电力系统中的主动配电网&#xff08;Active Distribution Network&#xff09;以及与之相关的智能储能软开关的规划方法。下面是对标题中各个关键词的解释&#xff1a; 前景导向的&#xff08;Future-oriented&#xff09;&#xff1a; 这表明该方法是以未来发展…

2022年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2022 年全国硕士研究生入学统一考试管理类专业学位联考数学试题一、问题求解&#xff1a;第 1∼15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分。下列每题给出的 A、B、C、D、E 五个选项中&#xff0c;只有一项是符合试题要求的&#xff0c;请在答&#xff0e;题…

strlen和sizeof练习题(以64位机器为例)

例一 一般情况下&#xff0c;数组名表示首元素地址&#xff0c;只有在以下的情况中数组名表示整个数组的地址&#xff1a; 1.sizeof&#xff08;数组名&#xff09;&#xff1a;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小 2.&数组名&#xff1a;这里的…

五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 &#xff08;1&#xff09;多目标粒子群优化算法MOPSO 多目标应用&#xff1a;基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度&#xff08;MATLAB代码&#xff09;-CSDN博客 &#xff08;2&#xff09;多目标人工蜂鸟算法&#xff08;MOAHA…

C语言进阶之笔试题详解(1)

引言&#xff1a; 对指针知识进行简单的回顾&#xff0c;然后再完成笔试题。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言&#xff1a; 知识简单回顾 指针是什么 指针变…

分布式篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、如何将长链接转换成短链接,并发送短信?二、长链接和短链接如何互相转换?三、长链接和短链接的对应关系如何存储?四、如何提高系统的并发能力?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…

航天宏图——宏图1号样例数据0.5米-5米分辨率(上海部分)

简介&#xff1a; 作为航天宏图“女娲星座”建设计划的首发卫星&#xff0c;航天宏图-1号可获取0.5米-5米的分辨率影像&#xff0c;具备高精度地形测绘、高精度形变检测、高分辨率宽幅成像以及三维立体成像等能力&#xff0c;在自然资源、应急管理、水利等行业与领域具有极高的…

【开源】基于Vue和SpringBoot的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…

LCM-LoRA模型推理简明教程

潜在一致性模型 (LCM) 通常可以通过 2-4 个步骤生成高质量图像&#xff0c;从而可以在几乎实时的设置中使用扩散模型。 来自官方网站&#xff1a; LCM 只需 4,000 个训练步骤&#xff08;约 32 个 A100 GPU 小时&#xff09;即可从任何预训练的稳定扩散 (SD) 中提取出来&#…

【深度学习笔记】03 微积分与自动微分

03 微积分与自动微分 导数和微分导数解释的可视化偏导数梯度链式法则自动微分非标量变量的反向传播分离计算 导数和微分 假设我们有一个函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:R→R&#xff0c;其输入和输出都是标量。 如果 f f f的导数存在&#xff0c;这个…

按需引入 ElMessage,没有样式且类型检查失败

文章目录 ElMessage 弹框没有样式问题描述解决方案 ts 类型检查失败问题描述解决办法 eslint 检查失败问题描述解决办法 ElMessage 弹框没有样式 问题描述 Element-plus 在使用 ElMessage 消息弹框的时候没有样式&#xff0c;按照官方的按需加载的方式引入的 import { ElMes…

Kafka系列 - Kafka一篇入门

Kafka是一个分布式流式处理平台。很多分布式处理系统&#xff0c;例如Spark&#xff0c;Flink等都支持与Kafka集成。 Kafka使用场景 消息系统&#xff1a;Kafka实现了消息顺序性保证和回溯消费。存储系统&#xff1a;Kafka把消息持久化到磁盘&#xff0c;相比于其他基于内存的…

PropertyTokenizer属性解析器实现,So Easy

PropertyTokenizer是Mybatis中的属性解析器&#xff0c;其主要实现原理如下&#xff1a; public PropertyTokenizer(String fullname) {// 判断是否以“.”分隔int delim fullname.indexOf(.);if (delim > -1) {name fullname.substring(0, delim);children fullname.su…

1 时间序列模型入门: LSTM

0 前言 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种用于处理序列数据的神经网络。相比一般的神经网络来说&#xff0c;他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义&#xff0c;RNN就能够很好…