Nginx-webpy快速搭建反向代理服务及web服务

1:webpy的简易web服务

目录 /data/webpy

结构

requirements.txt
run.py
run.sh
-static
-templates

(加”-”表示目录)

run.py
urls = [
"/", "_index",
"/json", "_json"
]

1:Location 中的 “/”

nginx的反向代理

http

upstream my_webpy {

server 127.0.0.1:8080;

}

server

location /webpy/{

proxy_pass http://my_webpy/;

# proxy_pass ;http:127.0.0.1:8080/

# the above both are right.

# cannot specify uri in prox_pass directive

}

上面的配置时正确的,并且是推荐的,/webpy/表示请求的是/webpy/目录下的文件。

proxy_pass http://my_webpy,表示在请求转发是以/作为根目录 如果没有最后一个”/”,则会以/webpy/即location中的uri作为根目录。

In a word,最后有”/”表示请求web服务的根目录,没有表示请求对应location 的根目录。

问题:如果是这样的配置

location /webpy{
proxy_pass http://my_webpy/;
}

即lcoation中少了一个”/”,那么譬如你请求 curl "127.0.0.1/webpy/"

那么nginx反向代理到webpy服务器的请求是 “//” ,没错,这是一个双//,因为这样表示的是将请求的/webpy映射到http:127.0.0.1:8080/。但是请求实际是/webpy/所以映射过来就是http:127.0.0.1:8080//

这种情况有两种解决方式,一是在nginx层做,改为推荐的配置,即第一个配置。另一点就是在webpy中做正则匹配,如

urls = [
"^/+$", "_index",
"^/+json$", "_json"
]

但是如果在urls中做的话,去请求静态资源(如果你的静态资源就放置在static目录下,而不是一个专门的静态资源服务器,并且你再html中使用了这样的相对路劲<script type='text/javascript' src="static/ajax.js"></script>)

那么你会发现html在请求静态资源时,webpy的日志时这样的

//static/ajax.js – 404 Not Found,

目前为了能正常访问我的js,css等,我是在nginx中做的。

Ajax.js

function send() {

req = {

"name": "percy",

"cip": "123.3.3.5"

}

$.ajax({

type: "POST",

url: "upass",

dataType: "json",

data: req,

success: function(data) {

alert(JSON.stringify(data.data))

}

})

}

在url这里有一个坑,

url: "/upass",这个表示当前服务的/upass,那么在单用webpy,不用nginx做反向代理是正确的,但是当使用nginx做反向代理是,这个ajax的请求是 “127.0.0.1/upass”,对比json的请求是”127.0.0.1/webpy/json”

如果配置成url: "upass",那么在使用反向代理或者不使用,直接访问webpy都是正常使用的。这猜测的原因哈:

url: "/upass”,表示当前服务器的根目录下的/upass,那么在有nginx的反向代理时,这个服务器指的是前面的nginx那么就是“127.0.0.1/upass”

url: "upass",表示当前服务的当前的目录下的upass,当前服务是nginx反向代理过来的/webpy/下所以是”127.0.0.1/webpy/json”

出现这些现象还有一个原因是这个的lcoation /webpy/却对应着后端的”/”,这其实不是一个规范的做法。最好就是location “/” 对应 “/”, location "/webpy/" 对应 “/webpy/”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值