http://blog.helosa.org/2010/02/10/nginx-proxy_pass.html
在nginx中配置proxy_pass时,如果是按照^~匹配路径时
要注意proxy_pass后的url最后的/
当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走
如果没有/,则会把匹配的路径部分也给代理走
01.location ^~ /static_js/
02.{
03.proxy_cache js_cache;
04.proxy_set_header Host js.test.com;
05.proxy_pass http://js.test.com/;
06.}
如上面的配置,如果请求的url是http://servername/static_js/test.html
会被代理成http://js.test.com/test.html
而如果这么配置:
01.location ^~ /static_js/
02.{
03.proxy_cache js_cache;
04.proxy_set_header Host js.test.com;
05.proxy_pass http://js.test.com;
06.}
则会被代理到http://js.test.com/static_js/test.htm
当然,我们可以用如下的rewrite来实现/的功能
location ^~ /static_js/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
rewrite /static_js/(.+)$ /$1 break;
proxy_pass http://js.test.com;
}
见配置,摘自nginx.conf 里的server 段:
server {
listen 80;
server_name abc.163.com ;
location / {
proxy_pass http://ent.163.com/ ;
}
location /star/ {
proxy_pass http://ent.163.com ;
}
}
里面有两个location,我先说第一个,/ 。其实这里有两种写法,分别是:
location / {
proxy_pass http://ent.163.com/ ;
}
location / {
proxy_pass http://ent.163.com ;
}
出来的效果都一样的。
第二个location,/star/。同样两种写法都有,都出来的结果,就不一样了。
location /star/ {
proxy_pass http://ent.163.com ;
}
当访问 http://abc.163.com/star/ 的时候,nginx 会代理访问到 http://ent.163.com/star/ ,并返回给我们。
location /star/ {
proxy_pass http://ent.163.com/ ;
}
当访问 http://abc.163.com/star/ 的时候,nginx 会代理访问到 http://ent.163.com/ ,并返回给我们。
这两段配置,分别在于, proxy_pass http://ent.163.com/ ; 这个”/”,令到出来的结果完全不同。
前者,相当于告诉nginx,我这个location,是代理访问到http://ent.163.com 这个server的,我的location是什么,nginx 就把location 加在proxy_pass 的 server 后面,这里是/star/,所以就相当于 http://ent.163.com/star/。如果是location /blog/ ,就是代理访问到 http://ent.163.com/blog/。
后者,相当于告诉nginx,我这个location,是代理访问到http://ent.163.com/的,http://abc.163.com/star/ == http://ent.163.com/ ,可以这样理解。改变location,并不能改变返回的内容,返回的内容始终是http://ent.163.com/ 。 如果是location /blog/ ,那就是 http://abc.163.com/blog/ == http://ent.163.com/ 。
这样,也可以解释了上面那个location / 的例子,/ 嘛,加在server 的后面,仍然是 / ,所以,两种写法出来的结果是一样的。
PS: 如果是 location ~* ^/start/(.*)\.html 这种正则的location,是不能写”/”上去的,nginx -t 也会报错的了。因为,路径都需要正则匹配了嘛,并不是一个相对固定的locatin了,必然要代理到一个server。
相关推荐
其中,“default”模式下,Nginx会自动根据location和proxy_pass指令中的参数设置,来决定Location重定向的目标地址。而当设置为“off”时,则不进行重定向的修改。最后一种模式“redirect replacement”需要手动...
在本文中,我们将深入探讨`location`指令的匹配机制以及在多个`if`语句中使用`proxy_pass`的方法。 首先,了解`location`的匹配指令: 1. `~`:表示执行一个正则匹配,区分大小写。 2. `~*`:表示执行一个正则匹配...
- **多站点部署**:在一个Nginx实例上,通过`location`和`proxy_pass`的不同组合,可以托管多个独立的Web应用。 5. **注意事项**: - 当`proxy_pass`后面跟着一个URL时,`rewrite`规则将在proxy_pass之前执行。...
注意:当location为正则表达式匹配模式时,proxy_pass中的url末尾是不允许有”/”的,因此正则表达式匹配模式不在讨论范围内。 proxy_pass配置中url末尾带/时,nginx转发时,会将原uri去除location匹配表达式后的...
以上仅是Nginx配置的冰山一角,实际应用中还可以结合正则表达式、if条件语句、自定义模块等实现更多高级功能。理解并熟练掌握这些基本配置,能够帮助运维人员更好地管理和优化Nginx服务器,提升网站性能和稳定性。
这里的正则表达式`~* \.(jpg|jpeg|png|gif|ico|css|js)$`匹配静态文件扩展名,`expires`指令设置缓存时间,`access_log off`关闭访问日志以优化性能。 通过以上配置,我们可以充分利用Nginx的优势,构建高效、稳定...
名称ngx_replace_filter-响应主体中的流式正则表达式替换。 该模块不随Nginx源一起分发。 请参阅。目录社区英文邮件列表中文邮件列表错误和补丁作者版权和许可也可以看看 地位尽管仍处于开发的早期阶段,该模块已经...
1. **正则表达式匹配**:在`Location`指令中使用正则表达式,可以实现更复杂和灵活的路由策略。例如,我们可以匹配所有以`.jpg`或`.png`结尾的图片请求: ```nginx location ~ \.(jpg|png)$ { # 处理图片请求的...
这里的^/home/(.*)$是一个正则表达式,用于匹配以/home/开头的请求,并将匹配到的部分重写为/opt/projects/wxmp/home/目录下的实际文件路径。 9. 文件权限和目录结构:配置SSL证书和私钥时,需要确保nginx进程有...
- PCRE(Perl Compatible Regular Expressions)库,用于Nginx支持正则表达式配置。 - Nginx源码,官方版本。 - url_hash模块的源码,这是第三方模块,提供了url_hash功能。 示例下载命令: ``` wget ftp://...
- **正则表达式匹配**:使用`~`(大小写敏感)或`~*`(大小写不敏感),如`location ~ ^/path/ {}`,匹配符合正则表达式的URL。 2. **匹配顺序** - **优先级**:精确匹配>`=`, 正则表达式>`^~`, 前缀匹配。当有多...
- **rewrite**: URL重写规则,使用正则表达式进行匹配和替换。 - **try_files**: 按顺序查找文件,找到即返回,未找到则按顺序执行下一条指令。 ### 3. Nginx反向代理 通过`proxy_pass`指令,Nginx可以作为反向...
在这个配置中,所有/file/目录下的请求,如果符合正则表达式,将会被重写并转发。 总之,Nginx的负载均衡功能强大且灵活,可以根据实际需求调整配置,以实现高效、可靠的分布式服务架构。结合反向代理,Nginx可以在...
* 可以使用正则表达式来匹配URI 二、代理传参 * proxy_pass 指令用于将请求代理到其他服务器 * 可以将整个 path 部分传入 Tomcat:proxy_pass = ip:port * 也可以只将匹配 path 的剩余部分传入 Tomcat:proxy_pass...
本文主要介绍Nginx中location匹配规则的小结,以及配置proxy_pass时路径是否带斜杠(/)的问题。 首先,Nginx的location匹配规则中,使用等号类型(=)时,表示精确匹配,优先级最高,一旦匹配成功,其他匹配规则将...
- **server_name**: 设置服务器的域名,可以是单个域名或正则表达式,用于匹配请求头中的Host字段。 - **root**: 设置服务器根目录,用于定位请求的静态资源。 - **index**: 设置默认首页文件,如`index.html`。 - *...
2. **location**:定义请求的匹配规则,可以根据URL路径、正则表达式等进行匹配。例如: ``` location / { proxy_pass http://backend_server; } ``` 这表示所有以"/"开头的请求都将被转发到`...
- **第7章 Nginx的Rewrite规则与实例**:讲解Nginx的URL重写功能,包括正则表达式和重写规则的编写,帮助实现URL美化和路由管理。 - **第3章 Nginx的基本配置与优化**:介绍Nginx配置文件结构、主要指令以及如何进行...
通过`upstream`块定义后端服务器组,然后在server或location块中使用`proxy_pass`指令将请求转发到该组。例如: ``` upstream backend { server backend1.example.com; server backend2.example.com; } ...
在安装 Nginx 之前,确保系统已经安装了必要的依赖库,例如 OpenSSL 用于加密通信,PCRE(Perl 兼容正则表达式)库用于解析配置文件中的正则表达式。 #### 2.2 安装 OpenSSL OpenSSL 是一个强大的安全套接字层密码...