Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx/python-将请求路由到另一个端口_Python_Redirect_Nginx_Port_Bottle - Fatal编程技术网

nginx/python-将请求路由到另一个端口

nginx/python-将请求路由到另一个端口,python,redirect,nginx,port,bottle,Python,Redirect,Nginx,Port,Bottle,我到处寻找答案,我相信答案很简单,但我没能找到。我认为由于我对nginx缺乏了解 我的nginx实例在localhost:8080上运行,我的瓶服务器在localhost:8081上侦听。如果我从浏览器中打开地址,它们可以正常工作,但是当我试图从本地主机8080上运行的应用程序中访问时,我无法检索服务器生成的资源 location ~* \.(json)$ { proxy_pass http://localhost:8081; } 我需要做的是将对/data/path的所有调用重定向到

我到处寻找答案,我相信答案很简单,但我没能找到。我认为由于我对nginx缺乏了解

我的nginx实例在localhost:8080上运行,我的瓶服务器在localhost:8081上侦听。如果我从浏览器中打开地址,它们可以正常工作,但是当我试图从本地主机8080上运行的应用程序中访问时,我无法检索服务器生成的资源

location ~* \.(json)$ {
    proxy_pass http://localhost:8081;
}
我需要做的是将对/data/path的所有调用重定向到同一个域(localhost),但另一个端口(8081),即我的瓶服务器正在侦听的端口

代码如下: Nginx:

瓶子服务器:

@route('/')
def printtest():
    print 'success'
    return 'loaded page'

@route('/<scenename>/data/<filename:path>')
def testMethod(scenename,filename):
    print scenename, filename

run(host='localhost', port=8081, debug=True)
有人能告诉我如何处理这种重定向/路由吗

另外,有没有办法从nginx在日志中打印提要?像命令print_条目还是类似的

谢谢

编辑:我试过了,但没有结果

编辑:好的,有一些改进,我发现这可能是查询位置的问题。通过这个块并请求一个.json文件,它实际上查询瓶子服务器

location ~* \.(json)$ {
    proxy_pass http://localhost:8081;
}

编辑:Yeee!我找到了一个解决办法。。。原来是位置中定义的路径有问题。自我说明:仔细阅读手册:

服务器的新代码:

server {
    listen       8080;
    server_name  localhost;
    root /Users/Diego/Desktop;

    location / {
        index  index.html index.htm;
    }

    location ~* /data/ {
        proxy_pass http://localhost:8081;
    }
}
server {
  listen       8080;
  server_name  localhost;
  root /Users/Diego/Desktop;

  location / {
    index  index.html index.htm;
  }

  location ~* /data/ {
    proxy_pass http://localhost:8081;
  }
}

无论如何,如果有人有更好的解决方案或任何建议,欢迎提供。

编辑:Yeee!我找到了一个解决办法。。。原来是位置中定义的路径有问题。自我说明:仔细阅读手册:

服务器的新代码:

server {
    listen       8080;
    server_name  localhost;
    root /Users/Diego/Desktop;

    location / {
        index  index.html index.htm;
    }

    location ~* /data/ {
        proxy_pass http://localhost:8081;
    }
}
server {
  listen       8080;
  server_name  localhost;
  root /Users/Diego/Desktop;

  location / {
    index  index.html index.htm;
  }

  location ~* /data/ {
    proxy_pass http://localhost:8081;
  }
}

无论如何,如果有人有更好的解决方案或任何建议,欢迎提供。

很高兴听到你解决了这个问题,谢谢你回来发布解决方案@Dieghito,请将您的更新作为正确答案发布。回答您自己的问题是可以接受的。我对您描述中的端口和代码感到困惑。您说在localhost:8080上运行nginx实例,在localhost:8081上侦听我的瓶子服务器,但是nginx配置显示
listen8081和瓶子
端口=8080
。谢谢,编辑并修复了它的工作原理。您的解决方案将
~*
添加到nginx
位置~*/data/
块。原始的
location/data/
匹配查询开头的文本字符串。添加
~
使用正则表达式,
*
添加不区分大小写的表达式。这是需要的,因为
/data/
GET/project1/data/directory/directory variatal.json的开头不匹配,但是regex发现它没有问题。是的,这正是我从这次经历中学到的!事实上,我不得不添加更多的规则,我遵循这个原则。感谢您的评论和解释!值得检查的是,是否需要在代理\u过程中的端口号后添加一个尾随斜杠。这让我们有一段时间有些沮丧!