IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx从入门到进阶 -> 正文阅读

[系统运维]Nginx从入门到进阶

目录

1. Nginx简介

2. Nginx安装部署

2.1 安装所需依赖

2.2 下载安装包,编译安装

2.3?验证安装

2.4 nginx服务相关命令

3?Nginx的配置详解

3.1?全局配置段

3.2?http配置段

3.3?Server常见配置属性

4.?Nginx进阶知识

4.1 nginx代理

4.2?负载均衡

4.2.1 nginx upstream模块

4.2.2?负载均衡调度算法?



1. Nginx简介

????????Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型网站Rambler.ru及搜寻引擎Rambler使用。

Nginx特点

? ? ? ? 优点:

????????高并发量:基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应
????????内存消耗少:善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源
????????简单稳定:配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定
????????模块化程度高:功能模块插件化设计,可以自由配置相应的功能。
????????支持Rwrite重写规则:能够根据域名、URL等请求关键点,实现定制化的高质量分发。
????????低成本:Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。?
????????支持多系统:Nginx代码完全用C语言从头写成,可以在各系统上编译并使用。

? ? ? ? 缺点:

????????动态处理差:nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺。
????????rewrite弱:虽然nginx支持rewrite功能多,但是相较于Apache之类重量级的web软件能力稍欠缺。

2. Nginx安装部署

2.1 安装所需依赖

yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

2.2 下载安装包,编译安装

# 下载
wget http://nginx.org/download/nginx-1.16.0.tar.gz
# 解压
tar -zxf nginx-1.16.0.tar.gz
# 进入解压后目录
cd nginx-1.16.0
# 配置安装路径:/usr/local/nginx
./configure --prefix=/usr/local/nginx
# 编译
make -j 8
# 安装
make install

2.3?验证安装

# 添加nginx用户
useradd nginx
# 给目录改变主属
chown nginx:nginx /usr/local/nginx
# 复制可执行文件
cp /usr/local/nginx/sbin/ /usr/bin/nginx
# 查看版本号 
nginx -v

返回内容如下所示,表示安装已经完成。

[root@python ~]# nginx -v
nginx version: nginx/1.16.0

2.4 nginx服务相关命令

nginx -v
nginx -s stop           # 停止服务
nginx -s reload         # 重启nginx服务
nginx -t		        # 检查默认配置文件
nginx -t -c file.conf	# 指定配置文件进行检查

3?Nginx的配置详解

使用命令nginx -t可以检查nginx的配置是否正确

[root@python conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

配置文件路径:/usr/local/nginx/conf/nginx.conf

日志文件路径:/usr/local/nginx/logs/

web目录:/var/www/html/
文件结构
?? ??? ?全局配置段
?? ??? ?http配置段
?? ??? ??? ?server配置段?? ??? ??? ?项目或者应用
?? ??? ??? ??? ?location配置段?? ??? ?url配置

3.1?全局配置段

主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:

user 					# 设置使用用户(worker)
worker_processes 		# 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
error_log 				# nginx的错误日志
pid  					# nginx服务启动时候pid 
events					# 定义事件相关的属性
  worker_connections 	# 一个进程允许处理的最大连接数
  use 					# 定义使用的内核模型epoll等

3.2?http配置段

主要配置server通用的一些配置

include mime.types; 						# 文件扩展名与文件类型映射表
default_type application/octet-stream; 		# 默认文件类型
sendfile on; 								# 开启高效文件传输模式。
autoindex on; 								# 开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; 								# 防止网络阻塞
tcp_nodelay on; 							# 防止网络阻塞
keepalive_timeout 120; 						# 长连接超时时间,单位是秒
gzip on; 									# 开启gzip压缩输出

3.3?Server常见配置属性

常见样式:

server {
    listen 端口;
    server_name 主机名;
    ...
}

server配置段最重要的属性是listen和server_name。它们都是用于匹配并处理请求的。
listen属性
????????作用:定义Server监听的ip和port,当ip/port匹配时候才进行下一步匹配
????????表现形式:

形式

描述

示例

完整示例

IP:Port

地址精确表示样式

listen 10.10.10.10:99

listen 10.10.10.10:99

IP

自动监听 IP:80地址

listen 10.10.10.10

listen 10.10.10.10:80

Port

自动监听 全地址:Port

listen 99或 [::]:99

listen 0.0.0.0:99

default_server

自动使用默认的地址

listen default_server

listen localhost:80

使用原则:首先将所有样式补全成IP:Port,然后匹配,匹配Server多,那么接着使用Server_name匹配

server_name属性

????????作用:定义Server监听的域名,当域名匹配时候才进行下一步操作

????????表现形式:

格式

完整样式

前缀正则样式

后缀正则样式

禁止非法域名或IP

形式

www.example.com

*.example.com

www.example.*

_

????????优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则。

????????非法域名/IP,表示请求到该主机上一个不存在的IP或者域名

root属性

????????作用:定义Server相应请求的html文件所在路径

????????表现形式:

root /var/www/html;

index属性

????????作用:定义响应请求后返回的文件名称或格式

????????表现形式:

index index.html index.htm index.nginx-debian.html;

return属性

????????作用:定义响应请求后返回的http状态码

????????表现形式:

????????????????return?????? 444;

location常见配置属性

????????location主要是根据Server匹配到的请求路径和关键字去响应和处理。

????????语法:

location optional_modifier location_match { ... } 
location @name { ... }

????????其中:optional_modifier是匹配条件,location_match是匹配的样式,{}是要执行的操作。匹配条件主要有两种:正则/前缀字符。

正则匹配

类型

含义

匹配方式

优先级

样式

~

普通正则-敏感

正则符号

3

location ~ .(jpe?g)$ {}

~*

普通正则-不敏感

正则符号

3

location ~* .(jpe?g)$ {}

普通正则?

普通匹配

类型

含义

匹配方式

优先级

样式

=/路径

精确匹配

前缀

1

location = /image {}

^~

优先匹配

前缀

2

location ^~ /page {}

@

内部重定向

前缀

location @name {}

空 /

通用匹配

前缀

4

location / {}

使用原则:

????????前提:根据请求url,获取uri即除了域名/IP之外的部分,用于location匹配

????????如果有精确匹配,即 =/路径,找到匹配项后,结束匹配。

????????????????location = 路径 {}? 或者? location 完整路径 {}

????????如果有优先匹配,即 ^~,找到匹配项后,结束匹配。

????????????????location ^~ 路径

????????如果有正则匹配,即 ~|!~|~*|!~*,找到匹配项后,不会终止继续匹配,直到找到合适的

????????????????location ~* 正则字符 {}

????????如果普通匹配到多个,则使用location_match最长的。

匹配示例:

????????

location = / {             	location ~ \.(gif|jpg|png|js|css)$ {  	location ~* \.xhtml$ {
   #精确规则A                     	#正则规则D                                	#正则规则G
}                          		}                                     		}
location = /login {        	location ~* \.png$ {                  		location / {
   #精确规则B                     	#正则规则E                                	#通用规则H
}                          		}                                     		}
location ^~ /static/ {     	location ~ \.xhtml$ {
   #优先规则C                     	#正则规则F
}                          		}

访问效果如下:

访问根目录/, 比如http://a.com/ 将匹配规则A

访问 http://a.com/login 将匹配规则B

访问 http://a.com/static/a.html 将匹配规则C

访问 http://a.com/a.gif, http://a.com/b.png 规则D和E均适合,按顺序优先使用规则D,而 http://a.com/static/c.png 则优先匹配到规则C

访问 http://a.com/a.PNG 则匹配规则E,因为规则E不区分大小写。

访问 http://a.com/a.XHTML 使用规则G。

访问 http://a.com/category/id/1111 则最终匹配到规则H。

关于URL尾部的/有如下注意事项:

1 location中的location_match字符有无"/"受影响。/user/不等同/user。/user可以匹配/user/abc也可以匹配/userabc,但/user/只能匹配/user/abc

2 对于访问网站域名(http://sswang.com/),尾部有无"/"不受影响。因为浏览器会自动补全"/"。

3 对于访问网站域名后面的路径(http://sswang.com/other/)。尾部的"/"很重要。

URL尾部的"/"表示目录,没有"/"表示文件,而且文件找不到的话,会发生重定向。

????????/other/:表示服务器会自动去该目录下找对应的默认文件。

????????/other:表示服务器会先去找other文件,找不到的话会将other当成目录,重定向到/other/,去该目录下找默认文件
location常见动作:

在location内部常用的功能属性非常多,常见的基本属性、临时跳转、访问控制、目录列表等。

基本属性

location / {
    	root   /var/www/html;					# 指定响应请求的文件所在路径
    	index  index.php index.html index.htm;	# 指定响应请求的默认文件名称
    	expires 7d;								# 指定响应请求的文件过期时间,一般用于静态文件
    	try_files $uri $uri/ =404;				# 如果root指定的路径下有查找的文件,就返回,否则报错
}

临时跳转

location = /test/ {
    return 302 http://sswang.com/;			# 访问旧url的时候,临时跳转到新url,两个url均不失效	
}

访问控制

location /nginx-status {
    stub_status on;  						# 开启nginx的状态页面,默认关闭
    allow 192.168.8.14;						# 允许的访问地址
    deny all;								# 默认进制所有访问
}
注意:该功能依赖于ngx_http_stub_status_module 模块(默认没有安装,需要定制化安装)

目录列表

location /upload {
    alias   /var/www/upload;		# 指定查看文件列表路径(绝对路径)
    autoindex on;             		# 开启目录自动索引
    autoindex_exact_size off; 	    # 默认on,显示文件确切大小(bytes)。off表示显示文件的大概大小(kB/MB/...)
    autoindex_localtime on;   	    # 默认off,显示的文件时间为GMT时间。on表示显示文件的服务器时间
}
注意:该alias指定的目录下,不允许出现index属性指定的文件。

root属性和alias属性的区别

root 和 alias 所起的作用都是指定响应请求所用文件的路径,只是他们有些许的区别
??? ?root ?? ?表示 location 匹配内容的相对路径
??? ?alias ?? ?表示 一个绝对路径,而且必须以"/"结尾
一般情况下,在location /中配置root,在location /other中配置alias

效果一:									效果二:
location /img/ {                       		location /img/ {
	alias /var/www/image/;                		root /var/www/image;
} 

效果一:访问http://localhost/img/1.html,nginx找/var/www/image/目录下的文件

效果二:访问http://localhost/img/1.html,nginx找/var/www/image/img/目录下的文件

location核心动作

????????Nginx的配置语法灵活,可控制度非常高。在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率。

指令语法

try_files file ... uri
try_files file ... =code

?作用:响应时按顺序查找file,找到则返回file内容,否则的话进行内部重定向(uri)或返回状态码(code)。

常见示例

如果能找到指定的uri那么就返回相应的内容,否则的话返回错误状态码404
try_files $uri $uri/ =404;
如果能找到指定的文件1/2.html那么就返回相应的内容,否则的话返回6.html文件内容
try_files /1.html /2.html /6.html;
如果能找到指定的uri那么就返回相应的内容,否则的话就内部重定向到后端名称为@backup的location
try_files $uri @backup;

4.?Nginx进阶知识

4.1 nginx代理

区别
从用途上来讲:
? ? ? ??? ?正向代理-为局域网客户端向外访问Internet服务。可以使用缓冲特性减少网络使用率。
? ? ? ? ? ?反向代理-为局域网服务器向外提供Internet服务。可以使用负载平衡提高客户访问量。还可以基于高级URL策略和管理技术对服务进行高质量管控。
从安全性来讲:
????????正向代理-必须采取安全措施确保内网客户端通过它访问外部网站。隐藏客户端的身份
????????反向代理-对外提供服务是透明的,客户端并不知道自己访问的是一个代理。隐藏服务端的身份

官方介绍

官方资料:http://www.nginx.cn/doc/standard/httpproxy.html

官方的代理属性很多,主要介绍proxy_pass和proxy_set_header属性

官方代码示例

location / {
: proxy_pass        http://localhost:8000;		# 设定请求跳转后的地址,可以使用hostname或IP:Port形式
: proxy_set_header  X-Real-IP  $remote_addr;	# 后端请求携带原始请求的真实IP地址
}

属性详解:proxy_pass 指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式

proxy_pass关键点

proxy_pass后面的路径最后的/作用很重要!!!

示例代码:

location /html/ {
  1 proxy_pass http://proxy.com; 
    2 proxy_pass http://proxy.com/;
}

假设我们访问的url是 http://domain.com/html/test.js,如何理解上述两种proxy_pass的区别呢?

对于 1 来说 proxy.com后面没有"/",表示"/html/" 请求(包括自己)后续的路径及其参数等关键字都由http://a.com/来处理,代理后的样式如下:
http://proxy.com/html/test.js     
对于 2 来所 proxy.com后面有"/",表示"/html/" 请求后续的路径及其参数等关键字都由http://a.com/来处理,代理后的样式如下:
http://proxy.com/test.js

?nginx代理实践

8000的反响代理服务器代理8001

# 8000的反响代理服务器代理8001
server {
    listen 8000;
    location / {
        # 转发给8001
        proxy_pass http://127.0.0.1:8001;
    }
}


server {
    listen 8001;
    location / {
        root /opt/html;
        index index.html;
    }
}

?4.2?负载均衡

4.2.1 nginx upstream模块

????????官方资料:http://www.nginx.cn/doc/standard/httpupstream.html

????????官方的代理属性很多,我们主要介绍upstream和ip_hash属性

upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;
}
 
server {
  location / {
    proxy_pass  http://backend;
  }
}

属性详解:

????????upstream 主要是定义一个后端服务地址的集合列表,每个后端服务使用一个server命令表示

????????upstream {} 和 Server {} 两部分内容属于平级关系。

后端服务状态

????????在upstream模块中,可以使用server命令指定后端服务器的地址,同时还可以设置后端服务器在负载均衡调度中的状态,常用的状态有以下几种:

  • ????????down: 表示当前server主机暂时不参与负载均衡。
  • ????????backup:后备主机,当所有非backup机器出现故障或者繁忙的时候,才会请求backup机器。
  • ????????max_fails:允许请求的最大失败数,默认为1,配合fail_timeout一起使用
  • ????????fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s。?

4.2.2?负载均衡调度算法?

官方资料:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#example

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

????????内置策略:nginx自带的算法

????????雨露均沾型:轮训加权轮训、哈希

????????定向服务型:ip_hash、least_conn、cookie、route、lean、

????????商业类型:ntlm、least_time、queue、stick

????????扩展策略:各种结合业务场景自定义的算法或者第三方算法

自定义算法

????????第三方算法:fairurl_hash

常用算法简介:

轮询(默认):请求按顺序逐一分配到不同的后端服务器。
weight:指定轮询权重,值越大,分配到的几率就越高,适用于后端服务器性能不均衡情况。
ip_hash:按访问IP的哈希结果分配请求,分配后访客访问固定后端服务器,有效的解决动态网页会话共享问题。
fair:基于后端服务器的响应时间来分配请求,响应时间短的优先分配。
url_hash:按访问URL的哈希结果分配请求,使同URL定向到同一台后端服务器,可提高后端缓存服务器的效率。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 21:50:43  更:2021-08-07 21:51:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 3:42:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计