Nginx一文学会,简单易懂,快速上手

Nginx的优点

  1. 速度更快、并发更高
  2. 配置简单,扩展性强
  3. 高可靠性
  4. 热部署
  5. 成本低、BSD许可证
    许可证

Nginx的核心组成

nginx二进制可执行文件
nginx.conf配置文件
error.log错误的日志记录
access.log访问日志记录

Nginx基本用法

  1. 开启nginx:sudo service nginx start
  2. 重启nginx:sudo service nginx reload
  3. 关闭nginx:nginx -s stop

Nginx代理

Nginx正向代理

	指代理服务器来接收Internet上的客户端请求,然后将请求转发给内部网络上的服务器,
	并将从服务器上得到的结果返回给客户端。
	此时代理服务器对外就表现为一个反向代理服务器

正向代理

Nginx反向代理

	一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得内容。
	客户端向代理发送一个请求并指定目标(原始服务器),
	然后代理向原始服务器转发并获得的内容返回给客户端。

反向代理

Nginx的主要功能

请求转发

在这里插入图片描述
Nginx的location路径映射

1. = 匹配

location = / {
    
    
	#精准匹配
}

2. 通用匹配

location /xxx {
    
    
	#匹配所有以/xxx开头的路径
}

3. 匹配开头路径

location ^~ /xxx/xx {
    
    
	#匹配所有以/xxx/xx开头的路径
}

4. 正则匹配

location ~ /xxx {
    
    
	#匹配所有以/xxx开头的路径
}

5. 匹配结尾路径

location ~* \.(gif/jpg/png)$ {
    
    
	#匹配以.gif、.jpg或者.png结尾的路径
}

6. 通用匹配

location / {
    
    
	#通用匹配,匹配所有请求
}

负载均衡

在这里插入图片描述

Nginx有三种负载均和的策略

1. 轮询:
将客户端发起请求,平均分配给每一台服务器

upstream daili_server{
    
    
    server localhost:8080; #服务器IP或域名
    server localhost:8081; #服务器IP或域名
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	location / {
    
    
        proxy_pass http://daili_server/;	#负载均衡
    }
}

2. 权重:
会将客户端的请求,根据服务器的权重值不同,分配不同的数量

upstream daili_server{
    
    
    server localhost:8080 weight=10; #服务器IP或域名
    server localhost:8081 weight=2;  #服务器IP或域名
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	location / {
    
    
        proxy_pass http://daili_server/;	#负载均衡
    }
}

3. ip_hash:
基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上
就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个

upstream daili_server{
    
    
	ip_hash;
    server localhost:8080; #服务器IP或域名
    server localhost:8081; #服务器IP或域名
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	location / {
    
    
        proxy_pass http://daili_server/;	#负载均衡
    }
}

动静分离

在这里插入图片描述
动态资源: 如JSP由Tomcat或其它WEB服务器处理。

location / {
    
    
  proxy_pass 路径;
}

静态资源: 如图片、css、js等由nginx服务器完成。

location / {
    
    
    root 静态资源路径;
    index 默认访问路径下的什么资源;
    autoindex on;#可以不写,写了则代表展示静态资源的全部内容,以列表的形式展开 
}

Nginx常用命令

cd /usr/local/nginx/sbin/
./nginx	# 启动
./nginx -s stop	# 停止
./nginx -s quit	# 安全退出
./nginx -s reload	# 重新加载配置文件
ps aux|grep nginx	# 查看nginx进程

Nginx核心配置文件结构

案例:

worker_processes 1;

events {
    
    
 	worker_connections 1024;
}
http {
    
    
 	include    mime.types;
 	default_type application/octet-stream;
 	sendfile    on;
 	keepalive_timeout 65;
 	server {
    
    
   		listen    80;
   		server_name localhost;
   		location / {
    
    
     		root  html;
     		index index.html index.htm;
   		}
   		error_page  500 502 503 504 /50x.html;
   		location = /50x.html {
    
    
     		root  html;
   		}
 	}
 }
...              #全局配置: 指令名 指令值; 主要设置Nginx服务器整体运行的配置指令

events {
    
             # events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
   ...   #指令名 指令值;
}

http {
    
         # 是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...  
	
    upstream edustudy {
    
    	# 负载均衡配置,默认是轮询
        server 127.0.0.1:8080 weight=1;	# weight是权重
        server 127.0.0.1:8081 weight=1;
    }
    server {
    
            #server代理  是Nginx配置和虚拟主机相关的内容
        listen       9001;
        server_name  localhost;	# 监听到之后转发到localhost
        
        location / {
    
      # 9001端口下的所有请求都会被匹配到这里  基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
			proxy_pass http://edustudy;	# 转发至负载均衡里
        }
        
        location /admin {
    
    
            
        }
       
        # 当地址中包含"eduService"时,请求会转发至 http://localhost:8085
        location ~ /eduService/ {
    
     
            proxy_pass http://localhost:8085;
        }

    }
    
    server {
    
    
      	listen       9002;
        server_name  localhost;
    }
}

小结:
nginx.conf配置文件中默认有三大块:全局块、events块、http块http块中可以配置多个server块,每个server块又可以配置多个location块。

Rewrite功能配置

Rewrite是Nginx服务器提供的一个重要基本功能,是Web服务器产品中几乎必备的功能。主要的作用是用来实现URL的重写。www.jd.com 注意:Nginx服务器的Rewrite功能的实现依赖于PCRE的支持,因此在编译安装Nginx服务器之前,需要安装PCRE库。Nginx使用的是ngx_http_rewrite_module模块来解析和处理Rewrite功能的相关配置
Rewrite的相关命令

  1. set指令
  2. if指令
  3. break指令
  4. return指令
  5. rewrite指令
  6. rewrite_log指令

Rewrite的应用场景

  1. 域名跳转
  2. 域名镜像
  3. 独立域名
  4. 目录自动添加"/"
  5. 合并目录
  6. 防盗链的实现

Rewrite的相关指令

set指令

该指令用来设置一个新的变量
在这里插入图片描述

variable:变量的名称,该变量名称要用"$"作为变量的第一个字符,且不
要与Nginx服务器预设的全局变量同名。
value:变量的值,可以是字符串、其他变量或者变量的组合等。

if指令

该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置。
在这里插入图片描述

break指令

该指令用于中断当前相同作用域中的其他Nginx配置。与该指令处于同一作用域的Nginx配置中,位于它前面的指令配置生效,位于后面的指令配置无效。并且break还有另外一个功能就是终止当前的匹配并把当前的URI在本location进行重定向访问处理。

在这里插入图片描述

return指令

该指令用于完成对请求的处理,直接向客户端返回。在return后的所有Nginx配置都是无效的
在这里插入图片描述

rewrite指令

该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理。

在这里插入图片描述

rewrite_log指令

该指令配置是否开启URL重写日志的输出功能。
在这里插入图片描述

Rewrite的案例

域名跳转

问题分析
先来看一个效果,如果我们想访问京东网站,大家都知道我们可以输入www.jd.com ,但是同样的我们也可以输入www.360buy.com 同样也都能访问到京东网站。这个其实是因为京东刚开始的时候域名就是www.360buy.com,后面由于各种原因把自己的域名换成了www.jd.com, 虽然说域名变量,但是对于以前只记住了www.360buy.com的用户来说,我们如何把这部分用户也迁移到我们新域名的访问上来,针对于这个问题,我们就可以使用Nginx中Rewrite的域名跳转来解决。
环境准备

  • 准备三个域名
vim /etc/hosts
127.0.0.1  www.itcast.cn
127.0.0.1  www.itheima.cn
127.0.0.1  www.itheima.com
  • 通过Nginx实现访问www.itcast.cn
server {
    
    
	listen 80;
	server_name www.itcast.cn;
	location /{
    
    
		default_type text/html;
		return 200 '<h1>welcome to itcast</h1>';
	}
}

通过Rewrite完成将www.ithema.com和www.itheima.cn的请求跳转到www.itcast.com

server {
    
    
	listen 80;
	server_name www.itheima.com www.itheima.cn;
	rewrite ^/ http://www.itcast.cn;
}

猜你喜欢

转载自blog.csdn.net/weixin_42506139/article/details/127282408