【问题标题】:nginx location path with proxy_pass带有 proxy_pass 的 nginx 位置路径
【发布时间】:2014-10-17 23:03:35
【问题描述】:

我有以下问题,我正在尝试将带有 gunicorn 服务器的 Django 应用程序放在运行 Nginx 的 VPS 上。我的 nginx 配置如下所示:

upstream app_name {
    server unix:/path/to/socket/file.sock fail_timeout=10;
}

server {

   listen 80 default_server;
   listen[::]:80 default_server ipv6only=on;
   root /webapps/;
   server_name my_hostname.com;

   location / {
      proxy_set_header Host $http_host;
}

   location /appname/ {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      proxy_pass http://app_name;

}

}

但是,当我导航到 my_server.com/appname/ 时,我不断收到 404 错误。我还是 Nginx 的新手,有人可以为我指出如何为/appname/ 路径设置 proxy_pass 的正确方向吗?我应该指出,当/appname/ 的位置被/ 替换时,django 应用程序运行良好。

【问题讨论】:

    标签: django nginx proxy gunicorn


    【解决方案1】:

    proxy_pass 只需要一个斜杠即可:

    proxy_pass http://app_name/;
    

    它可以帮助您削减“appname”前缀,使配置看起来像:

    upstream app_name {
        server unix:/path/to/socket/file.sock fail_timeout=10;
    }
    
    server {
    
       listen 80 default_server;
       listen[::]:80 default_server ipv6only=on;
       root /webapps/;
       server_name my_hostname.com;
    
       location /appname/ {
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;
    
          proxy_pass http://app_name/;
    
    }
    

    【讨论】:

    • @KonradWąsowicz 不客气,请确保您直接通过 Nginx 提供图像(通过使用静态资产定义另一个位置),这是推荐的方式。
    • 我这样做了,但是后来我遇到了一些奇怪的问题,即每次我单击应用程序内的链接时,它都会不断将地址重置为 root,例如当我单击 login 链接而不是去到hostname.com/appname/login 它重定向到hostname.com/login
    • @KonradWąsowicz 在您的情况下,所有应用内重定向都需要使用 URL“/appname”前缀重写。如果很难做到,只需根据example 挂载应用程序并删除尾部斜杠即可。
    • @mikhailov 在 settings.py 中添加FORCE_SCRIPT_NAME = '/appname' 对我有用。谢谢。
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2017-02-04
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多