【Nginx】关于域名转发proxy_pass

  在配置nginx的时候,有一个需求,访问m.XXX.com的时候,需要实际访问www.YYY.com/m,并且域名不能发生变化。

  达成这个需求有两种做法:

    第一种就是301跳转,使用rewrite来跳转域名,不过这样域名就会发生变化,与需求不符。

    第二种就是用proxy_pass跳转,只要指定跳转目的域名,就可以在访问的时候自动跳转访问目的域名,而且域名也不会发生变化。所以这里需要使用第二种方法。



  首先在/etc/nginx/conf.d/建立一个m.XXX.com.conf文件,内容为:

 1 server
 2 {
 3         listen 80;
 4         server_name m.XXX.com;
 5
 6         location /
 7         {
 8             proxy_pass http://www.YYY.com/m/;
 9         }
10 }    

  这里要注意proxy_pass后面域名最后的"/",如果不添加,会跳转失败。

  然后在/etc/nginx/nginx.conf的http块内添加一行:

1 include /etc/nginx/conf.d/m.XXX.com.conf;

  然后就是重启nginx:

1 sudo /usr/nginx/nginx -s reload

  这样就可以在访问m.XXX.com的时候自动跳转到访问www.YYY.com/m了,而且域名不会发生改变。

  这里又出现了一个问题,静态资源访问不了,所以我们在m.XXX.com.conf里添加静态资源访问设置:

 1 server
 2     {
 3         listen 80;
 4         server_name m.XXX.com;
 5
 6         location /
 7         {
 8             proxy_pass http://www.YYY.com/m/;
 9         }
10
11         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$
12         {
13             root /home/YYY/java/apache-tomcat-6.0.41/webapps/ROOT/;
14             expires      30d;
15         }
16     }

  当指定了静态资源的访问目录后,就能够访问到静态文件了。

  至此,需求已经解决!



  在测试后,还出现了一个问题,后台需要获取用户的信息,所以需要在m.XXX.com.conf的location内添加上下面的两行,用以修改请求头:

1 proxy_set_header Host $http_host;
2 proxy_set_header X-Forward-For $remote_addr;

  按理说这样就可以了,可是却出现了"502 Bad Gateway"错误,如果将第一行给删去,则可以恢复正常访问页面,如果除去注释,错误又出现了。查询了很多办法,均无法解决这个问题,兹将次问题记下,待解决了补齐!

时间: 2024-12-17 16:09:55

【Nginx】关于域名转发proxy_pass的相关文章

Nginx配置域名转发实例

域名:cps.45wan.com   所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: server {listen 80; server_name cps.45wan.com; root /home/web/cps.45wan.com/htdocs/www; location / { root /home/web/cps.45wan.com/htdocs/www; } locatio

nginx做域名转发和uri转发

一. 域名转发 www.qq.com ------> www.baidu.com nginx部署在192.168.1.100,本地配置host 192.168.1.100 www.qq.com ,浏览器输入www.qq.com会跳转到www.baidu.com # vi  /etc/nginx/nginx.conf user nginx;worker_processes 1; events { use epoll; worker_connections 10240; } http { serve

nginx 多域名转发

nginx配置多域名转发其实蛮简单的,网上都是资料. 我纠结的是我配置成功的第二个域名,转发不添加项目名 就找不到我的项目. 一直在想是不是nginx配置出了问题,后来转念一想. 是因为我的项目在tomcat中没有放在ROOT目录下.

Linux JDK Tomcat Nginx MariaDB 安装,Nginx 多域名转发配置

安装JDK rpm包下载地址(jdk-7u17 ): http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u17-oth-JPR # yum install wget -y JDK下载地址: http://download.oracle.com/otn/java/jdk/7u17-b02/jdk-7u17-linux-x64.rpm?Auth

nginx 配置域名转发

自己测试环境,配置下载目录和一个jenkins的地址: 域名跳转,反向代理 # cat ../nginx.conf user www www; worker_processes 1; error_log logs/error.log info; pid logs/nginx.pid; worker_rlimit_nofile 65535; events { worker_connections 65535; use epoll; } http { include mime.types; defa

搭建nginx反向代理用做内网域名转发

基于域名的7层转发的实现(NAT+反向代理) 在实际办公网中,因为出口IP只有一个,要实现对外提供服务的话就必须得做端口映射,如果有多个服务要对外开放的话,这只能通过映射不同端口来区分,这在实际使用过程中非常的痛苦(记忆困难.一一对应关系也没有规律.访问的时候还得加端口),这个痛苦的问题用表格的形式来形象的描述如下: Public IP Public Port Number Internal IP Internal Port Number Note 1.1.1.1 80 192.168.1.10

使用nginx正向代理实现内网域名转发

客户内网环境,使用ppoe拨号上网,提供商为集团内部二级运营商,网络环境比较复杂,在集团内部网络和办公网络采用静态路由协议互联,大致情况如下所示: 原来客户访问生产业务,都是通过ip地址访问,随着生产业务越来越多,现在客户强烈要求使用域名方式访问业务.但是鉴于内网环境复杂,不好部署域名服务器,部署了访问业务也比较困难.后来学习nginx,知道nginx可以实现正向代理实现域名转发.整体思路如下:说明:1.在阿里云上配置域名解析.例如OA.XXXX.COM,解析地址为内网地址172.31.101.

nginx虚拟域名的配置以及测试验证

1.保证该机器上安装了nginx 未安装请看:centos/linux下的安装Nginx 2.使用root用户编辑配置文件 vim /usr/local/nginx/conf/nginx.conf 3.新建vhost文件夹 cd /usr/local/nginx mkdir vhost 4.在文件中添加这句话(将文件分类便于管理) include vhost/*.conf; 5.测试配置文件 nginx -t 出现如上图则配置完成 6.在vhost上面添加对应的xxx.conf文件即可 例如:

Nginx 实现端口转发

什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过 localhost:8001 //图书 localhost:8002 //电影 但我们一般访问应用的时候都是希望不加端口就访问域名,也即两个应用都通过 80 端口访问.但我们知道服务器上的一个端口只能被一个程序使用,这时候如何该怎么办呢?一个常用的方法是用 Nginx 进行端口转发.Nginx 的实现原理是:用 Nginx 监听 80 端口,当