栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Nginx

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx

Nginx

1. 正向代理和反向代理
  1. 正向代理代理客户端(客户端开启VPN访问外网;用户有感知,需要客户端主动开启VPN)
  2. 反向代理代理服务器端(客户端将请求发送给代理,由代理去决定交给哪台服务器处理,到底是哪台服务器处理的请求用户无感知;)

2. 负载均衡

Nginx的负载均衡有两种策略:

  1. 内置策略
  2. 扩展策略
2.1 Nginx 的内置策略
  1. 轮询:假设有三台服务器,通过Nginx将请求平均的分发到三台服务上;
  2. 加权轮询:通过添加权重,可以给服务器性能比较好的设置较大的权重,将更多的请求转发给这台服务器;
  3. Ip Hash:对客户端请求的Ip 进行Hash操作,然后根据Hash结果将同一个客户端Ip 的请求分发给同一服务器;可以解决Session不共享的问题;(不建议采用Nginx解决Session共享问题,推荐使用Redis);
3. 动静分离

静态文件:不需要后台处理的文件称之为静态文件;

4. Nginx的目录结构

4.1 conf

nginx.conf Nginx 的主配置文件;

4.2 html

存放默认的网页和一些静态资源;

4.3 logs

日志记录的文件夹;

  1. access.log:访问日志
  2. error.log:错误日志
4.4 sbin

存放Nginx的主程序;

5. Nginx.conf 的基本配置
# ....
# 全局配置:配置影响nginx全局的指令。

# events配置:配置影响nginx服务器或与用户的网络连接。
events {
	worker_connections 1024;
}
# http配置:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
http {
	// http 配置
	
	upstream xx{
		// 负载均衡配置
	}
	
	# server配置:配置虚拟主机的相关参数,一个http中可以有多个server。
	server {
		listen 80;
		server_name  localhost;
		# 代理location配置:配置请求的路由,以及各种页面的处理情况。
		location [PATTERN] {
		
		}
	}
}
5.1 nginx 的最小配置
# 启动的工作进程个数;nginx 的工作模型是由 1 个master进程和 n 个 work进程运行的;(n>=1)
worker_processes 1;
# 启动10个工作进程
# worker_processes 10;  

# 事件驱动模块
events {
	# 每个work进程可以创建的连接数;(每个work可以创建1024个连接)worker_processes number | auto;
	worker_connections 1024;
}

http {
	#include命令:引入其他的配置文件;(引入mime.types配置文件) 
	include		mime.types;
	#如果mime类型没匹配上,默认使用二进制流的方式传输
	default_type	application/octet-stream;
	
	#数据0拷贝; 使用linux的sendfile(socket,file,len)高效网络传输;
	# on:例如当客户端向nginx发送请求一个视频文件,当on开启时,nginx不会将这个文件加载进内存之后,然后在内存中再返回给客户端。而是让客户端直接去操作系统中文件的位置,直接去read/write 文件;
	sendfile	on;
	
	# 保持连接,超时的时间;
	keepalive_timeout	65;
	
	# server:代表一个虚拟主机
	server {
		# listen:当前监听的服务器的端口号;
		listen 80;
		# 当前这台主机的主机名称;
		server_name  localhost;
		
		# 什么是url,什么是uri?
		# `https://www.baidu.com/test/tieba.html/` ===> url
		# 域名:`https://www.baidu.com/`
		# `/test/tieba.html/`  ===> uri
		# location:匹配 uri
		location /{
			# root:匹配到location 之后,从哪个(html)目录下去找资源文件;
			# html:指的是相对路径(/usr/local/nginx)(nginx的主目录);
			root html;
			# 匹配location之后,后缀是index的话,默认去找index.html或者index.htm文件;
			index index.html index.htm;
		}
		
		# 错误页面,当服务器发生 500 502 503 504 等错误码时,找 域名 + /50x.html 页面;
		# `https://www.baidu.com/50x.html`
		error_page 500 502 503 504 /50x.html;
		# 匹配上面的 /50x ;
		location /50x.html{
			# 找到相对路径下的 html 文件夹下的 /50x.html 页面;
			root html;
		}
	}
}
5.2 nginx详细配置
# 启动的工作进程个数;nginx 的工作模型是由 1 个master进程和 n 个 work进程运行的;(n>=1)
worker_processes 1;
# 启动10个工作进程
# worker_processes 10;

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

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit | alert | emerg]
# error_log [path] [debug | info | notice | warn | error | crit | alert | emerg] 
# 这个设置可以放入全局块,http块,server块
error_log /var/log/nginx/error.log info;

# 事件驱动模块
events {
	# worker_processes number | auto;
	# 每个work进程可以创建的最大连接数;(每个work可以创建1024个连接)
	worker_connections 1024;
	
	#设置网路连接序列化,防止惊群现象发生(防止多个进程对连接的争抢),默认为on
	# 惊群现象:Nginx服务器为多进程的; 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。
    accept_mutex on;   
    
    #设置一个进程是否同时接受多个网络连接,默认为off;
    # off:nginx一个工作进程只能同时接受一个新的连接
    # on:一个工作进程可以同时接受所有的新连接。
    # 如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。
    multi_accept on;  
    
    # 指定使用哪种网络IO模型 user select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #use select;
    #use epoll;      
    
    #客户端请求头部的缓冲区大小。
    #client_header_buffer_size 4k;
}

http {
	#include命令:引入其他的配置文件;(引入mime.types配置文件) 
	include		mime.types;
	#如果mime类型没匹配上,默认使用二进制流的方式传输
	default_type	application/octet-stream;
	
	#数据0拷贝; 使用linux的sendfile(socket,file,len)高效网络传输;
	# on:例如当客户端向nginx发送请求一个视频文件,当on开启时,nginx不会将这个文件加载进内存之后,然后在内存中再返回给客户端。而是让客户端直接去操作系统中文件的位置,直接去read/write 文件;
	# 可以在http块、server块或者location块中进行配置
	sendfile	on;
	
	# 设置sendfile最大数据量,此指令可以在http块、server块或location块中配置
	# sendfile_max_chunk size;
    # 其中,size值如果大于0,Nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值(这里是128k,所以每次不能超过128k);如果设置为0,则无限制。默认值为0。
    # sendfile_max_chunk 128k;
	
	# 保持连接,超时的时间;
	# 此指令可以在http块、server块或location块中配置。
	# keepalive_timeout timeout [header_timeout]:
	# header_timeout,可选项,在应答报文头部的Keep-Alive域设置超时时间:“Keep-Alive:timeout= header_timeout”
	keepalive_timeout	65;  # 超时时间 65s;
	# 在服务器端保持连接的时间设置为120 s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100 s。
	# keepalive_timeout 120s 100s
	
    # 配置单连接请求数上限;
    # 此指令可以在http块、server块或location块中配置。
    # Nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数。默认是100
    # keepalive_requests number;
	
	
	# access_log配置,此指令可以在http块、server块或者location块中进行设置
	# 记录Nginx服务器提供服务过程应答前端请求的日志
	# # access_log path [format [buffer=size]]
	access_log off;		# 关闭access_log
	
	# log_format指令,用于定义日志格式,此指令只能在http块中进行配置
	# 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;
    
    #负载均衡配置 
    # upstream 负载均衡
    # aliasWddong:虚拟别名,对应 http.server.location里的 proxy_pass 参数;
    upstream aliasWddong {
     #weight:权重,weigth参数越大被分配到的几率越大。
     server 192.168.80.121:80 weight=3;
     server 192.168.80.122:80 weight=2;
     server 192.168.80.123:80 weight=3;
     # down,backup参数
     # server 192.168.80.121:80 down;==>down表示当前的server暂时不参与负载
     # server 192.168.80.121:80 backup;==>其它所有的非backup机器down或者忙的时候,请求backup机器。
	}
    # upstream 的ip_hash方式
    # 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    # (并非一定能解决session问题,当手机(车辆上移动)连接,变化到不同的基站时,会造成ip的变化,导致session丢失)
    #upstream bakend {
    #    ip_hash;
    #    server 192.168.0.14:88;
    #    server 192.168.0.15:80;
    #}
    
    # upstream 的fair方式(第三方)
    #按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    #upstream backend {
    #    server server1;
    #    server server2;
    #    fair;
    #}
    
    # upstream 的url_hash(第三方)
    #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    #upstream backend {
    #    server squid1:3128;
    #    server squid2:3128;
    #    hash $request_uri;
    #    hash_method crc32;
    #}
	
	# server:代表一个虚拟主机
	server {
		# listen:当前监听的服务器的端口号;
		# 三种配置语法。这个指令默认的配置值是:listen *:80 | *:8000;
		# 方式一: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]];
		listen 80;
		# listen 127.0.0.1:8000;  #只监听来自127.0.0.1这个IP,请求8000端口的请求
        # listen 127.0.0.1; #只监听来自127.0.0.1这个IP,请求80端口的请求(不指定端口,默认80)
        # listen 8000; #监听来自所有IP,请求8000端口的请求
        # listen *:8000; #和上面效果一样
        # listen localhost:8000; #和第一种效果一致
        # 如果没配置listen指令,当nginx以超级用户权限运行,则使用*:80,否则使用*:8000。
		# 可选参数详解,见下面的章节
		
		# 当前这台虚拟主机的主机名称;
		# server_name "";
		# 可以只有一个名称,也可以由多个名称并列,之间用空格隔开。每个名字就是一个域名,由两段或者三段组成,之间由点号“.”隔开。
		# eg:server_name myserver.com www.myserver.com
		server_name  localhost;
		
		# 什么是url,什么是uri?
		# `https://www.baidu.com/test/tieba.html/` ===> url
		# 域名:`https://www.baidu.com/`
		# `/test/tieba.html/`  ===> uri
		# location:匹配 uri
		location /{
			# 代理
			# proxy_pass 一个具体的地址 | 一组服务器(配合upstream使用);
			# proxy_pass http://aliasWddong; 反向代理到上面upstream配置的aliasWddong一组服务器上;
			proxy_pass	http://www.XXX.com;
			# 反向代理不支持https服务器,https服务器需要域名和证书对应上;
			# 当匹配到“/”之后,就会代理到 “http://www.XXX.com” 地址上;
			# 需要注意的是 proxy_pass 和下方的 root 配置同时存在时,只能同时生效一个;(上方的配置会生效);
			#拒绝的ip
            # deny 127.0.0.1; 
            #允许的ip 
            # allow 172.18.5.54; 
		
			# root:匹配到location 之后,从哪个(html)目录下去找资源文件;
			# html:指的是相对路径(/usr/local/nginx)(nginx的主目录);
			root html;
			# 匹配location之后,后缀是index的话,默认去找index.html或者index.htm文件;
			index index.html index.htm;
		}
		
		# 错误页面,当服务器发生 500 502 503 504 等错误码时,找 域名 + /50x.html 页面;
		# `https://www.baidu.com/50x.html`
		error_page 500 502 503 504 /50x.html;
		# 匹配上面的 /50x ;
		location /50x.html{
			# 找到相对路径下的 html 文件夹下的 /50x.html 页面;
			root html;
		}
	}
}

更多详细配置解析:Nginx 配置文件nginx.conf中文详解

5.3 http.server.listen 可选参数解析
  • default_server:假如通过Host没匹配到对应的虚拟主机,则通过这台虚拟主机处理。
  • backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在FreeBSD中默认为-1,其他平台默认为511。
  • accept_filter=filter,设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。本指令只在FreeBSD和NetBSD 5.0+平台下有效。filter可以设置为dataready或httpready,感兴趣的读者可以参阅Nginx的官方文档。
  • bind:标识符,使用独立的bind()处理此address:port;一般情况下,对于端口相同而IP地址不同的多个连接,Nginx服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接。
  • ssl:标识符,设置会话连接使用SSL模式进行,此标识符和Nginx服务器提供的HTTPS服务有关。
6. 引用

程序员自由之路:Nginx配置文件详解

菜鸟教程:Nginx 配置详解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号