nginx使用详解:转发规则、负载均衡、server_name

这篇具有很好参考价值的文章主要介绍了nginx使用详解:转发规则、负载均衡、server_name。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、nginx常用的转发规则

location 指令说明

  • 该指令用于匹配 URL,语法如下:
指令 说明
= 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
~ 用于表示 uri 包含正则表达式,并且区分大小写。
~* 用于表示 uri 包含正则表达式,并且不区分大小写。
^~ 用于不含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
!~ 区分大小写不匹配。
!~* 不区分大小写不匹配
/a 普通前缀匹配,优先级低于带参数前缀匹配。
/ 任何请求都会匹配
  • 首先匹配 =
  • 其次匹配^~,
  • 其次是按文件中顺序的正则匹配
  • 最后是交给 / 通用匹配
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

location转发使用

  • location /api1/
# 如果请求的是:http://localhost:80/api1,
# 转发形成的就会是:http://localhost:8001/
		location /api1/ {
			proxy_pass http://localhost:8001/;
        }       
  • location = /api1/ (精确匹配)
# 如果请求的是:http://localhost:80/api1,会被匹配到
# 转发形成的就会是:http://localhost:8001/
# 如果请求的是:http://localhost:80/api1/test,不会被匹配到,因为是精确匹配
		location = /api1/ {
			proxy_pass http://localhost:8001/;
        }
  • location ~ /api1 (正则表达式匹配)
# rewrite重写了请求路径,break不可省略,$1为正则匹配的内容
# ^/api1/(.*)$,在这个正则表达式中,$1为(.*)中的内容
# proxy_set_header的使用并不会失效
# 如果请求的是:http://localhost:80/api1,
# 转发形成的就会是:http://localhost:8001/
		location ~ /api1 {	
			rewrite ^/api1/(.*)$ /$1 break;
			proxy_set_header test001 $host:$server_port;
			proxy_set_header test002 $remote_addr;
			proxy_pass http://localhost:8001;
        }

二、upstream负载均衡使用

#server只能是ip+端口,不然启动报错
	upstream api{
		server localhost:9001;
		server localhost:9002;
		server localhost:9003;
	}
#proxy_pass里面的api对应的是upstream后面的api
		location /api/ {	
			proxy_pass http://api/;
        }

三、server_name使用

  • 看下列代码,端口一样,server_name不一样
  • 访问http://www.test001.com/api/test,进入第一个server,转发的实际为http://localhost:9001/test
  • 访问http://www.test002.com/api/test,进入第二个server,转发的实际为http://localhost:9002/test
  • 对于没有配置的server_name,默认进入第一个server处理
  • 访问http://127.0.0.1/api/test,进入第一个server,转发的实际为http://localhost:9001/test
  • 访问http://www.test003.com/api/test,进入第一个server,转发的实际为http://localhost:9001/test
#本机host配置
127.0.0.1 www.test001.com
127.0.0.1 www.test002.com
127.0.0.1 www.test003.com
    server {						
		#监听端口
        listen       80;		
		#服务名
        server_name  www.test001.com;		
		
		
	    location / {
            root   html;
            index  index.html index.htm;
        }
		
		location /api/ {	
			proxy_pass http://localhost:9001/;
        }
		
		#500类型错误处理
        error_page   500 502 503 504  /50x.html;
		#映射文件50x.html
        location = /50x.html {	
			#相对路径
            root   html;
        }

    }
	
	server {						
		#监听端口
        listen       80;		
		#服务名
        server_name  www.test002.com;		
		
		
	    location / {
            root   html;
            index  index.html index.htm;
        }
		
		location /api/ {	
			proxy_pass http://localhost:9002/;
        }
		
		#500类型错误处理
        error_page   500 502 503 504  /50x.html;
		#映射文件50x.html
        location = /50x.html {	
			#相对路径
            root   html;
        }
    }

四、其他常用配置

限制请求类型

  • 只允许GET和POST请求,写在server块
if($request_method !~ ^(GET|POST)$ ){
	return 403;
}

处理静态资源目录遍历问题

  • 过滤…/ |…\,写在server块
if( $request_uri ~* \.\.[\\\\/] ){
	return 404;
}

限制客户端使用的ip或者域名

  • 写在server块
#当写127.0.0.1的时候,使用localhost会报500,只能使用127.0.0.1
if ( $host !~ ^127.0.0.1 ){
	return 500;
}

五、需要注意的地方

  • 当使用 location ~ 的时候, proxy_pass结尾不能为 / ,不然会报错
  • access_log需要写在log_format后面,不然启动会报错。
  • access_log只能打印出请求的路径,无法打印出代理之后的路径。

location /api1 探讨

# 如果请求的是:http://localhost:80/api1,
# 转发形成的就会是:http://localhost:8001/api1
		location /api1 {
			proxy_pass http://localhost:8001;
        }        
# 如果请求的是:http://localhost:80/api1,
# 转发形成的就会是:http://localhost:8001/
		location /api1/ {
			proxy_pass http://localhost:8001/;
        }        
# 如果请求的是:http://localhost:80/api1,
# 转发形成的就会是:http://localhost:8001//
		location /api1 {
			proxy_pass http://localhost:8001/;
        }     

location ~ /api1 探讨(正则表达式)

#proxy_pass最多只能写到端口
#比如http://localhost:9001/,多个/报错
#比如http://localhost:9001/test,多个/test报错
#所以正则表达式的转发经常配合rewrite使用
		location ~ /api1 {	
			proxy_pass http://localhost:9001;
        }

$host 和 $remote_addr 的区别

  • $host 是客户端使用的ip或者域名,$remote_addr是客户端真正的ip
# $host为127.0.0.1
# $remote_addr为127.0.0.1
http://127.0.0.1/api/test

# $host为www.test001.com
# $remote_addr为127.0.0.1
http://www.test001.com/api/test

# $host为localhost
# $remote_addr为127.0.0.1
http://localhost/api/test

# 假设我本机ip为192.168.1.27
# $host为www.baidu.com
# $remote_addr为192.168.1.27
https://www.baidu.com/s?wd=北京

其他

Rewrite命令语法

rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记
flag标记说明
标记 说明
last 相当于Apache的【L】标记,表示完成rewrite
break 本条规则匹配完成即终止,不在匹配后面的任何规则
redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新url
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url
ast和break比较
last break
使用场景 一般写在server和if中 一般使用在location中
URL匹配 不重质重写后的url匹配 终止重写后的url匹配
#$1为(.*)
rewrite ^/api1/(.*)$ /$1 break;

#$1为前面的(.*),$2为后面的(.*)
rewrite ^/(.*)/(.*)$ /$1 break;

#当正则表达式和请求不匹配的时候,后面的/$1将不被执行,请求不会被rewrite替换
rewrite ^/apitest/(.*)$ /$1 break;

springboot 打印请求路径

logging:
  level:
    org.springframework: debug

springboot打印controller被调用的方法

logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

Controller获取请求头的内容

HttpServletRequest request;
Enumeration<String> enumeration= request.getHeaderNames();

参考文档

  • springboot 打印请求的uri和请求参数
  • Servlet–HttpServletRequest获取请求信息(请求头、请求行、参数)详解
  • Nginx配置文件
  • Nginx之正则表达式、location匹配简介以及rewrite重写
  • nginx 正则路径匹配
  • Nginx的基本使用

文章来源地址https://www.toymoban.com/news/detail-797585.html

到了这里,关于nginx使用详解:转发规则、负载均衡、server_name的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx 【location配置路径详解、反向代理、负载均衡】

    在使用nginx时,我们配置最多的就是location项了。方向代理、负载均衡、静态资源服务器这些高频使用的共能点,几乎主要都在location配置。本文内容将包含上诉功能,并详细介绍location的匹配规则。 location的匹配语法分成两个部分, [] 括号中的时匹配符,决定以何种方式进行

    2024年02月03日
    浏览(35)
  • 使用Nginx实现负载均衡

    本文将详细介绍使用Nginx实现负载均衡的方法。 负载均衡(Load Balancing)是将传入的请求流量分发到多个后端服务器的技术,以达到消除单点故障、提高可用性、增加扩展性等目的。 负载均衡需要根据算法来决定如何将请求分发到后端服务器。常见的负载均衡算法包括: 2.2.1 轮询

    2024年02月12日
    浏览(28)
  • 【nginx实战】nginx正向代理、反向代理、由反向代理实现的负载均衡、故障转移详解

    本文将要讨论以下内容 正向代理与反向代理的基本概念 Nginx正向代理服务的配置指令、Nginx反向代理服务的配置指令 Nginx反向代理服务器的应用——负载均衡、故障转移 案例分析   正向代理的概念 局域网内的机器借助代理服务访问局域网外的网站,此代理服务器提供的服务

    2024年01月24日
    浏览(38)
  • Nginx详解 第五部分:Ngnix反向代理(负载均衡 动静分离 缓存 透传 )

    什么是正向代理? 正向代理代理的是客户端 。 客户端设备要访问局域网以外的 Internet 时,需在客户端浏览器中配置代理服务器,然后通过代理服 务器来进行访问,将访问到的局域网以外的 Internet 网站内容返回给客户端,而不是通过局域网中的客 户端设备直接访问。 正向

    2024年02月10日
    浏览(42)
  • nginx fair负载均衡方式使用

    抱歉,我之前回复错误,没有完成回答。以下是完整的安装过程: 1. 下载Fair模块源代码: 在 https://github.com/gnosek/nginx-upstream-fair/releases 下载最新版本的Fair模块源代码。 2. 下载Nginx源代码: 在 http://nginx.org/en/download.html 下载最新版本的Nginx源代码。 3. 解压下载的Nginx和Fair模块源

    2024年02月09日
    浏览(24)
  • 使用nginx进行负载均衡配置详细说明

    nginx应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提

    2024年02月07日
    浏览(35)
  • mysql集群使用nginx配置负载均衡

    参考链接: https://mu-sl.com//archives/mysql%E9%9B%86%E7%BE%A4%E4%BD%BF%E7%94%A8nginx%E9%85%8D%E7%BD%AE%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1 配置文件nginx_tcp.conf 示例 mysql 集群搭建(双主模式) https://mu-sl.com/archives/mysql%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%E5%8F%8C%E4%B8%BB%E5%8F%8C%E4%BB%8E%E5%8F%8C%E4%B8%BB%E7%83%AD%E5%A4%87

    2024年02月07日
    浏览(27)
  • Nginx从安装到使用,反向代理,负载均衡

    1.1、Nginx介绍 Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。 Nginx是由 伊戈

    2024年02月10日
    浏览(29)
  • Nginx使用之反向代理、负载均衡、动静分离

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强。 其他服务器介绍:Apache服务器、Tomcat服务器、Lighttpd服务器 正向代理 是代理用户客户端,为客户端发送请求, 对服务器隐藏自己的真实客户端。 用途:1

    2024年02月11日
    浏览(40)
  • Nginx配置大全【六大使用场景、七大负载均衡策略、四大负载健康检查】

    !!! 反向代理也可以基于请求路径转发到不同服务器 !!! !!!反向代理路径结尾加不加 / 符号的区别!!! 如果只是简单的重定向操作,并且不需要进行复杂的路径重写或捕获,推荐使用 return 301 的方式来实现重定向。这样能够更直接、更高效地达到重定向的目的,避免不必要的

    2024年04月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包