9
回答
Nginx反向代理问题。

我在一台服务器上安装了两个不同的web服务,以下是nginx的配置,但是始终只能用www进行访问,二级域名oa始终无法访问。不知道问题出在哪儿,麻烦各位大神帮帮忙,谢谢了!

用浏览器访问oa的日志如下:

182.148.111.98 - - [29/May/2013:03:58:30 +0800] "-" 400 0 "-" "-"
182.148.111.98 - - [29/May/2013:03:58:40 +0800] "-" 400 0 "-" "-"
182.148.111.98 - - [29/May/2013:03:59:09 +0800] "-" 400 0 "-" "-"

 

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 oa.3apz.com; 
		location / { 
			proxy_pass http://127.0.0.1:8080; 
			proxy_set_header Host $host:80;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_set_header Via    "nginx"; 

		} 
	}

	server { 
		listen 80; 
		server_name www.3apz.com; 
		location / { 
			proxy_pass http://127.0.0.1:9000; 
			proxy_set_header Host $host:80;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_set_header Via    "nginx"; 
		} 
	}
}

就算减少到这样也不行。也是www.可以访问,oa死活就不行。而且都能两个域名都能ping通。

	server { 
		listen 80; 
		server_name oa.3apz.com; 

		location / { 
			proxy_pass http://127.0.0.1:8080; 
		} 
	}

	server { 
		listen 80; 
		server_name www.3apz.com; 
		location / { 
			proxy_pass http://127.0.0.1:9000; 
		} 
	}
举报
比比
发帖于5年前 9回/890阅
共有9个答案 最后回答: 5年前

1. 在 nginx bin 目录下执行 nginx -t path  ,path 为配置文件路径 ,测试下 配置文件是否 正常 。有无报错 。

2 你本机看下 http://127.0.0.1:8080 能否访问 ,目测 是这里出了问题  。你可以访问看看 。

http://oa.3apz.com:8080/

http://oa.3apz.com:9000/



--- 共有 1 条评论 ---
比比真心都可以访问的。我reload无数次了,没有语法错误的。 5年前 回复

在keepalive=65;后面增加

upstream webservers {

    server 127.0.0.1:8080;
    server 127.0.0.1:9000;

}

修改两个server项配置里的server_name我一样的

server_name  ww.3apz.com oa.3apz.com

最后更改两个server的location项里的proxy_pass为相同的

proxy_pass http://webservers;


试试看如何?

--- 共有 1 条评论 ---
比比我的两个是不同的web应用,这样弄的话,变成了负载均衡了! 5年前 回复

可以看我博客,应该是解决你的一模一样的问题

--- 共有 2 条评论 ---
BLUE-魏晓峰@比比 嗯,效率有点低,不过如果可以的话可以优化再测试一下。nginx 我也是初学,不过这种方案确实可以解决你的问题,哈哈 5年前 回复
比比是这个吗? http://my.oschina.net/hetiangui/blog/132253 我觉得这样的效率是不是太低了? 5年前 回复

引用来自“几点人”的答案

在keepalive=65;后面增加

upstream webservers {

    server 127.0.0.1:8080;
    server 127.0.0.1:9000;

}

修改两个server项配置里的server_name我一样的

server_name  ww.3apz.com oa.3apz.com

最后更改两个server的location项里的proxy_pass为相同的

proxy_pass http://webservers;


试试看如何?

是的,我理解错了
在keepalive_timeout=65;后面增加
upstream webservers{
              server 127.0.0.1:9000;
}
upstream  oaservers{
               server 127.0.0.1:8080;
}
然后更改你的第一个server 中location配置里的proxy_pass如下:
proxy_pass http://oaservers;
再在更改你的第二个server 中location配置里的proxy_pass为:
proxy_pass http://webservers;
其他保持变。
试试如何?
--- 共有 1 条评论 ---
比比之前就是这样做的,和直接在server中指定没有区别的。 5年前 回复

去掉 


 proxy_set_header Host $host:80;

 proxy_set_header   X-Real-IP        $remote_addr;

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;


proxy_set_header Via    "nginx";

,以上完全没有必要!


--- 共有 1 条评论 ---
比比已经去了,增加这个会在http的head中增加, 应用层如果引用相关信息的话就需要。 5年前 回复

开log看看啊,把$upstream_addr打出来。

--- 共有 2 条评论 ---
比比用浏览器访问oa的日志如下: 182.148.111.98 - - [29/May/2013:03:58:30 +0800] "-" 400 0 "-" "-" 5年前 回复
比比咨询一下怎么开呢? 5年前 回复

越来越神奇了,以下配置,

访问http://3apz.com:直接到8080端口,

访问www.3apz.com:又到http://www.cbern.gov.cn

访问oa.3apz.com:继续400错误。有没有更详细的日志功能啊?连nginx再哪儿找的配置都不知道了。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

	
upstream webservers { 
    server 127.0.0.1:8080; 
} 

	server { 
		listen 80; 
		server_name oa.3apz1.com; 
		location / { 
			proxy_pass http://webservers; 
			proxy_set_header Host $host:80;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_set_header Via    "nginx"; 
			proxy_connect_timeout   30;

		} 
	}

	server { 
		listen 80; 

		server_name *.3apz.com; 
		location / { 
			proxy_pass http://www.cbern.gov.cn/; 
			proxy_set_header Host $host:80;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_set_header Via    "nginx"; 
		} 
	}
}


终于解决了,结果是机房二级域名需要审核。如果未审核只建立tcp连接,所有请求全部扔掉。

谢谢各位。

 

顶部