nginx如何按目录配置反向代理,混合反向代理设置
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
nginx
除了可以处理静态资源外,他的另外一个重要功能,就是反向代理。比如:nginx反代php/node/java等等。本文中,苏南大叔结合以前的相关文章,讲述一下nginx
的混合反向代理功能。这里强调一下【混合】的概念,就是说:在一个域名下,可能同时反代到:php、node、java,甚至根本不知道源码是基于什么语言的其他网站。
前言
本文强调“在同一个域名”之下,混合部署多种不同编程语言的后台程序。听上去有些不是很正常,对吧?不过,这也许是个趋势走向,当一门编程语言,无法发挥其优势的时候,就必须辅以其它另外一门其他的变成语言了。
本文的范例中,nginx
混合代理了四个网站:
- 一个普通的
php
- 一个基于
thinkjs
的node
代码 - 一个基于
hexo
的node
网站 - 一个其它未知编程语言的网站
proxy_pass
配置文件
nginx
的代理功能,常见的有两种配置方法: fastcgi_pass
和proxy_pass
(本文仅仅描述后者)。
fastcgi_pass
,这种一般配置起来都比较麻烦,不同的编程语言有不同的配置方法和参数。proxy_pass
,使用proxy_pass
的时候,nginx
并不关心是什么编程语言的。只要写对了远程服务器的ip(或域名),端口号,及传递过去的 header
中的host
,就可以正常实现反代功能。
server {
listen 80;
server_name nginx;
# root /code/nginx/www/;
index index.html index.htm;
location ^~ /php/{
root /code/nginx/php/;
index index.php;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
}
location ^~ /node {
#proxy_pass http://127.0.0.1:4000;
proxy_pass http://127.0.0.1:4000/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ^~ /css/ {
root /code/nginx/node/public/;
}
location ~ ^/(fancybox|images|js)/{
root /code/nginx/node/public/;
}
}
proxy_pass
要点说明
要明确nginx反代的最基本用法:那就是proxy_pass
,这里有两个重要变数,大家一定要注意:
- 第一个就是:放在
proxy_pass <remote addr>
后面的源地址(网址/ip,加端口号),这个地址的末尾带不带 /
斜线非常重要。带/
斜线和不带/
斜线的话,是有本质区别的:区别主要是是访问nginx的时候,路径部分在被proxy的server中如何处理的问题。 - 第二个就是:
proxy_set_header Host <host>
中的<host>
。上一条规则的<remote addr>
中,即使写的是域名,程序在对待上也是按ip对待的,就是说一定要指定<host>
,才能得到想要的结果。
相关文章
- 《nginx代理php程序》:https://newsn.net/say/nginx-vhost-php.html
- 《nginx代理node程序》:https://newsn.net/say/nginx-thinkjs.html
小结
nginx很好很强大。更多经验文章,请查看苏南大叔的相关文字。https://newsn.net/tag/nginx/ 。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。