Nginx学习记录一揽子:学会配置Nginx

news2024/9/23 21:22:42

前言

在配置我的网站的过程中,深觉自己功力尚浅,不由黯然伤神,遂有奋进之意,针对这个过程中的不自然优雅的操作,得加强学习。在配置整个虚拟网络的过程中,由于对Nginx的了解不深,使用起来也捉襟见肘,就从Nignx的学习开始。

Nignx是什么

Nignx是一款轻量级的高性能web服务器和反向代理服务器,也提供IMAP/POP3/SMTP服务。具有占用少,并发性高,可扩展性好,高可靠性,热部署的特点。
正向代理
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器中获取内容,客户端向代理发送一个请求并指定目标,然后代理服务器向原始服务器转交请求并间获得的内容返回给客户端。正向代理是在客户端的。
反向代理
反向代理方式是指以代理服务器来接受网络上的连接请求,然后将请求准发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,反向代理是在服务端的。

Nginx使用

配置文件nginx.conf

nginx.conf是一个纯文本类型的文件,整个文件以区块的形式组织,每一个区块都放在大括号中。

  • main块位于nginx.conf配置文件的最高层,是nginx的全局配置,设置一些影响Nginx服务器的配置指令;main块下边有events块和http块。
  • event块的内容影响nginx服务器与用户的网络连接。包括每个进程的最大连接数,选取哪种驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • http块中有一个或多个server块;配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,minme-type,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块下允许有一个或多个location块;用于配置虚拟主机的相关参数。
  • location块用来配置请求的路由,以及各种页面的处理情况。
main

通常配置运行Nginx服务器的用户(组)、允许的worker process数量,Nignx
进程PID文件存放路径、日志的类型和存放路径。

# 定义Nginx运行的用户和用户组 
user [user] [group]; 

# nginx进程数,可以指定具体线程数,一般为cpu支持的线程数,也可使用自动配置 
worker_processes [number]|auto; 

# 全局错误日志定义类型
error_log [path] [debug|info|notice|warn|error|crit]

# 进程pid文件,指出pid文件的路径 
pid [path]; 
events

通常配置Nignx服务器与用户的网络连接,包括是否开启对多work process的网络连接进行序列化,每个线程支持的最大并发连接数,选取哪种驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

events { 
	# 是否对对个连接进程序列化
	# 开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢
	accept_mutex on|off;
	
	# 一个工作进程是否能同时接受所有的新连接
	# 默认为off,一个工作进程只能同时接受一个新连接。
	# Nignx使用`kqueue`驱动模型,忽略该指令。
	multi_accept on|off;
	
	# 指定使用哪种驱动模型,需要结合操作系统进行选择。
	use [select|poll|kqueue|rtsig|epoll|/dev/poll]; 
	
	# 设置单个进程并发的最大连接数,当连接数超过时就不再接收请求。
	#  不能超过系统支持的最大打开文件数。
	worker_connections [number]; 
	
	#keepalive超时时间。这里是应用层的keep-alive
	keepalive_timeout [time];
	 
	# 客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置
	client_header_buffer_size 1k; 
	
	# 这个将为打开文件指定缓存,默认是没有启用的
	# max指定缓存数量,建议和打开文件数一致.
	# inactive是指经过多长时间文件没被请求后删除缓存。 
	open_file_cache max=65535 inactive=60s;
	
	#这个是指多长时间检查一次缓存的有效信息。 
	open_file_cache_valid [time];
} 	
http

用于配置代理、缓存、日志定义和第三方模块等功能。http块可以包含自己块内的main块,也可以包含server块。

http{
	# 文件扩展名与文件类型映射,mime.types文件与配置文件同级目录
	include mime.types;
	
	# 默认文件类型,默认值为text/plain。
	default_type application/octet-stream;
	
	# 默认编码 
	charset utf-8;
	
	# 保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。
	server_names_hash_bucket_size [size];
	
	# 客户端请求头部的缓冲区大小,可以根据系统分页大小来设置
	client_header_buffer_size [size];
	
	# 客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。
	large_client_header_buffers 4 [size];
	
	# 设定通过nginx上传文件的大小 
	client_max_body_size [size];
	
	# log_format指令,用于定义日志格式
	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 [path] main;
	
	# 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件
	sendfile on|off;
	
	# 设置sendfile最大数据量 
	sendfile_max_chunk [size];
	
	# size值如果大于0,Nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值(这里是128k,所以每次不能超过128k);如果设置为0,则无限制。默认值为0。
	sendfile_max_chunk 128k;
	
	#此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用 
	tcp_nopush on; 
	tcp_nodelay on;
	
	# 配置连接超时时间
	# timeout,服务器端对连接的保持时间。
	# 默认值为75s;header_timeout,可选项,在应答报文头部的Keep-Alive域设置超时时间
	keepalive_timeout [timeout] [header_timeout];
	
	# 单连接请求数上限
	#指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数。默认是100
	keepalive_requests [number];
	
	#gzip模块设置 
	gzip on; #开启gzip压缩输出 
	gzip_min_length 1k; #最小压缩文件大小 
	gzip_buffers 4 16k; #压缩缓冲区 
	gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
	gzip_comp_level 2; #压缩等级 
	gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型 
	gzip_vary on;
	
	# 负载均衡配置
	upstream [mywebsite] {
		server [ip1]:[port1] weight=[number1]; # weight是权重
		server [ip2]:[port2] weight=[number2];
    }
}
server

用来配置虚拟主机。虚拟主机技术主要应用于Http、FTP以及email等多项服务,将一台服务器虚拟化分为多个虚拟服务器,从而充分利用服务器硬件资源,从外界看来,一台虚拟主机与一台独立的服务器是一样的。
Nginx服务器利用虚拟主机技术避免为每一个网站配置单独的Nginx服务器,同一台服务器只需要一组Nginx就可以运行多个网站或服务。
server块也有自己的全局块,在全局块中,最常见的是本虚拟主机的监听配置listen指令和本虚拟主机名称或ip配置的server_name指令。

listen指令

用于配置监听端口,有三种配置语法。

listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; 

listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; 

listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

字段含义说明:

  • address:监听的ip地址(请求来源的IP地址)。
  • port:端口号,默认80端口。多个虚拟主机端口号可以相同,但是server_name需要设置为不同域名或标识。
  • default_serve:匹配失败后,转向默认虚拟主机处理。
  • ssl:标识符,设置会话连接使用SSL模式进行,需要SSL证书,采用Https连接。
server_name指令

配置虚拟主机的名称。

server_name [name];

可以由多个名称并列,之间用空格隔开。

location

每个server块中可以包含多个location块。主要用于Nginx服务器接收到的请求字符串对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。
该块的定义为:

location [ = | ~ | ~* | ^~ ] uri { ... }

uri指待匹配的请求字符串,可以为字符串,也可以为正则表达式。
方括号中为可选项,用来说明请求字符串与 uri 的匹配方式。

nginx.conf案例
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

worker_rlimit_nofile 51200;

events {
    use epoll;
    worker_connections 10240;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server_names_hash_bucket_size 128;
    client_header_buffer_size     32k;
    large_client_header_buffers   4 32k;

    client_max_body_size          50m;
    limit_conn_zone $binary_remote_addr zone=perip:256k;
    limit_conn_log_level notice;

    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;
    tcp_nopush     on;

    keepalive_timeout 65;
    tcp_nodelay on;

    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;
    gzip_vary on;

    upstream mywebsite {
        server wps:80;
    }

    server {
        listen 80;

        sendfile on;
        keepalive_timeout 65;

        charset utf-8;

        location / {
            charset utf-8;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://mywebsite;
            proxy_redirect off;
        }
    }
}

说一说

Nginx可以说十分精妙,这篇博文就作为一个种子,象征着一个方向学习的开始,海纳百川,皆由点滴汇聚,望行走人生小路,无限进步。
张伟壁纸2.jpg

参考

  • W3C Nginx教程
  • Nginx文档

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

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

相关文章

LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…

C++ 算法学习 之 string find

这里写目录标题 String的查找方法 find使用:返回值:输出结果 更多string方法 参考于 c手册 String的查找方法 find 使用: std::string str ("There are two needles in this haystack with needles."); std::string str2 ("…

Pytorch搭建循环神经网络RNN(简单实战)

Pytorch搭建循环神经网络RNN(简单实战) 去年写了篇《循环神经网络》,里面主要介绍了循环神经网络的结构与Tensorflow实现。而本篇博客主要介绍基于Pytorch搭建RNN。 通过Sin预测Cos import torch import torch.nn as nn import numpy as np from matp…

医学影像相关开源数据集资源汇总

CT 医学图像 下载链接:http://suo.nz/2tQehH 该数据集旨在允许测试不同的方法来检查与使用对比度和患者年龄相关的 CT 图像数据的趋势。基本思想是识别与这些特征密切相关的图像纹理、统计模式和特征,并可能构建简单的工具,在这些图像被错误…

MyEclipse项目导入与导出

一、项目导出 1、右键选择项目名称,弹出菜单中选择“export”,如下图所示 2、选择“恶心“export”,弹出菜单如下;在“General“选项中,选择“File System”选项 3、点击“next”,进入保存位置选择界面&am…

异步FIFO设计的仿真与综合技术(5)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文,添加了笔者的个人理解与注释,文中蓝色部分为笔者注或意译。前文链接: 异步FIFO设计的仿真与综合技术&#xf…

小目标检测高效解决方案汇总,附19篇原论文&开源代码

目标检测发展至今,涌现出了许多非常实用的方法,但在小目标检测领域, 由于小目标经常存在图片模糊、信息少、分辨率低等问题,性能水平仍然难以提升。 不过在近几年间,已经有许多有效的解决方法被提出,我今天…

前端录入音频并上传

目录 纯 js 实现(有问题)使用插件 recorder-core (没问题) 纯 js 实现(有问题) 上传音频文件时 blob 数据中 size 一直是0,导致上传之后音频不可播放(本地录制后本地是可以播放的&am…

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS(跨源资源共享)⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为…

【前端知识】Three 学习日志(三)—— 光源对物体表面的影响

Three 学习日志(三)—— 光源对物体表面的影响 一、设置材质为受光照影响 //MeshLambertMaterial受光照影响 const material new THREE.MeshLambertMaterial();此时,场景中一片漆黑,无法看到原来的物体,需要设置光源…

24v转5v稳压芯片-5A大电流输出ic

这款24V转5V5A汽车充电芯片具有以下特性和参数: - 宽输入电压范围:4.5V至36V - 最大输出电流:5.0A - 高达92%的转换效率 - 恒流/恒压模式控制 - 最大占空比100% - 可调输出电压 - 2%的输出电压精度 - 集成40mΩ高侧开关 - 集成18mΩ低侧开关 …

网络安全深入学习第六课——热门框架漏洞(RCE— Weblogic反序列化漏洞)

文章目录 一、Weblogic介绍二、Weblogic反序列化漏洞历史三、Weblogic框架特征1、404界面2、登录界面 四、weblogic常用弱口令账号密码五、Weblogic漏洞介绍六、Weblogic漏洞手工复现1、获取账号密码,这是一个任意文件读取的漏洞1)读取SerializedSystemI…

K8s(Kubernetes)学习(六)——Ingress

第六章 Ingress 什么是 IngressIngress 和 Service 区别Ingress 控制器 Traefik 使用Ingress Route的定义 1 简介 https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/ Ingress 是一种 Kubernetes 资源类型,它允许在 Kubernetes 集群中暴露…

浏览器报错内容:Provisional headers are shown

浏览器报错内容:Provisional headers are shown 如下图: 解决方法:nginx 443 启用HTTP/2模式,如下图: server {listen 443 ssl http2;server_name callcenterda.umworks.com;client_max_body_size 200M;ssl_session_…

Idea注释相关配置模板

设置-编辑器-实时模板。 这里可以自己建立一个文件夹,建立自己的模板 1、普通多行注释 2、方法注释 我的方法注释模板文本: ** *$param$$return$ **/ 点击编辑变量: 两个默认值分别为: groovyScript("if(\"${…

倾情奉献,纯css(无图,无JS)原创中秋贺卡!!!

🪴 背景故事 中秋节马上就要到了,在这里我提前祝大家生活美满万年长,阖家幸福永平安!🥳 好了进入正题,最近掘金出了一个“中秋创意投稿”活动,我向来对这种可以写一些具有创意性的代码的活动很…

问题记录:两台Ubuntu之间传输文件(SCP)

1.查看IP地址 首先查看目标设备的 IP 地址:要把文件传到哪台机器上,就看哪台机器的 IP 地址,有两种方法 1.在终端输入 ifconfig: 2.设置里面看 2. 在自己的PC端 ping 一下目标机器的 IP 地址,看是否可以连接 ping 172.17.160…

使用ROS与Movelt实现myCobot 280运动轨迹规划和控制

ROS的技术案例 Introduction 今天这篇文章将记录我使用myCobot 280 M5stack 在ROS当中是如何使用的。为什么使用ROS呢,因为提及到机器人都离不开ROS这个操作系统,今天是我们第一次使用ROS这个系统。 今天我将从ROS的介绍,环境的配置以及mycob…

DPU加速AI应用“遍地开花”,中科驭数亮相2023全球AI芯片峰会

9月15日,2023全球AI芯片峰会(GACS 2023)在深圳举行,聚集了全球AI芯片产业的领军者和中坚力量,共探AI芯片的求新、求变、求索之径。中科驭数高级副总裁张宇应邀在智算中心算力与网络高峰论坛发表题为《基于DPU的高效AI大…

《2023年中国数字孪生行业报告》丨附下载_三叠云

✦ ✦✦ ✦✦ ✦✦ ✦ 随着近年来人工智能、物联网、虚拟现实等技术的持续发展以及元宇宙概念的兴起,数字孪生概念进一步完善,适用范围不断拓宽。然而非业界人士对数字孪生概念仍缺乏统一认知。对此,本报告介绍数字孪生概念、行业情况、市场…