Nginx 乘客分包uri';s

Nginx 乘客分包uri';s,nginx,passenger,Nginx,Passenger,Phusion乘客指南在很多方面都很好。在设置NGINX、乘客应用程序、测试python等方面,他们的安装指南远远好于一般安装指南。关于在一台服务器上设置多个独立应用程序的说明是有缺陷的。我采用Passenger的主要原因是能够托管多个应用程序 我按照Phusion Passenger的说明使用子URI()设置NGINX服务器。我认为这将允许我使用不同的子文件夹运行不同的应用程序。我在/var/www中有几个python应用程序,如下所示: /var/www/dashboard /var/www

Phusion乘客指南在很多方面都很好。在设置NGINX、乘客应用程序、测试python等方面,他们的安装指南远远好于一般安装指南。关于在一台服务器上设置多个独立应用程序的说明是有缺陷的。我采用Passenger的主要原因是能够托管多个应用程序

我按照Phusion Passenger的说明使用子URI()设置NGINX服务器。我认为这将允许我使用不同的子文件夹运行不同的应用程序。我在
/var/www
中有几个python应用程序,如下所示:

/var/www/dashboard
/var/www/peniso
我在单独的子文件夹venv中为每一个都提供了一个Python虚拟环境。每一个单独工作。但是,如何一次提供所有信息呢?我看到的问题是,无论使用哪个子URI,都会运行相同的应用程序

以下是我在/etc/nginx/sites enable/dashboard.conf文件中尝试的内容:

server {
    listen 80;
    server_name testapp.myexample.com;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/dashboard/public;

    passenger_app_type wsgi;
    passenger_startup_file passenger_wsgi.py;

    # Turn on Passenger
    passenger_enabled on;
    passenger_python /var/www/dashboard/venv/bin/python3.7;

    location ~ ^/mydash(/.*|$) {
        alias /var/www/dashboard/public$1;
        passenger_base_uri /mydash;
        passenger_app_root /var/www/dashboard;
        passenger_document_root /var/www/dashboard/public;
        passenger_enabled on;
        passenger_python /var/www/dashboard/venv/bin/python3.7;
   }


   location ~ ^/efergy(/.*|$) {
        alias /var/www/peniso/public$1;
        passenger_base_uri /efergy;
        passenger_app_root /var/www/peniso;
        passenger_document_root /var/www/peniso/public;
        passenger_enabled on;
        passenger_app_env development;
        passenger_python /var/www/peniso/venv/bin/python3.7;
   }
}
我浏览
http://testapp.myexample.com/mydash
http://testapp.myexample.com/efergy
我看到的是同一个应用程序。在上面的部分,在子部分之前,我可以将“dashboard”替换为“peniso”,它会更改运行哪一个应用程序。我已经翻转了文件夹的顺序,还将根目录从一个更改为另一个。似乎只有一个应用程序可用

如何配置乘客使用多个不同的应用程序


最终,我需要托管一些Python和一些Node.js应用程序,一旦我了解了如何使/var/www下的目录正常工作。

我有一个解决方案,该解决方案特定于使用名为Dash的抽象层编写的Python Ploty dashboard。我希望所有Plotly应用程序都能找到类似的修复程序,但没有实现它。可以修改Dash Plotly应用程序以理解调用的子URI。如果web URL为
http://example.com/energy
,则需要在Plotly应用程序中进行简单更改

从标准部分开始:

app = dash.Dash(__name__,
    meta_tags=[
        {
            "name": "viewport",
            "content": "width=device-width"
        }
    ]
)
包括网址的最后一部分

app = dash.Dash(__name__,
    meta_tags=[
        {
            "name": "viewport",
            "content": "width=device-width"
        }
    ],
    requests_pathname_prefix='/energy/'
)
app.config.suppress_callback_exceptions = True
最后一行是我同时在详细列表中找到的东西,我不知道它是否重要

在Passenger文档中,我发现sub-uri问题对于除Rails之外的所有类型的应用都是严重的,Rails有一个纯Passenger解决方案。整个事件没有很好的记录。但是node.js文档()中确实有一个警告:

在Passenger GitHub问题列表中,我创建了一个关于“使用url重写”的文档详细信息请求,因为在大多数情况下,这似乎是唯一真正可行的答案()。对于我来说,为我们想要运行的每个不同的node.js应用程序找出特定于案例的修复是不可行的


为了让每个人都了解这种情况,Passenger框架结构确实可以将服务器引导到正确的文件夹,但是当需要实际执行应用程序时,nginx&Passenger,出于我不理解的原因,恢复运行他们在配置文件中找到的第一个应用程序。只要你解决了这个问题,让每个应用都知道如何调用——也许nginx会阅读他们的公告??——那么这就行了

我有一个特定于Python Ploty dashboard的解决方案,它是用名为Dash的抽象层编写的。我希望所有Plotly应用程序都能找到类似的修复程序,但没有实现它。可以修改Dash Plotly应用程序以理解调用的子URI。如果web URL为
http://example.com/energy
,则需要在Plotly应用程序中进行简单更改

从标准部分开始:

app = dash.Dash(__name__,
    meta_tags=[
        {
            "name": "viewport",
            "content": "width=device-width"
        }
    ]
)
包括网址的最后一部分

app = dash.Dash(__name__,
    meta_tags=[
        {
            "name": "viewport",
            "content": "width=device-width"
        }
    ],
    requests_pathname_prefix='/energy/'
)
app.config.suppress_callback_exceptions = True
最后一行是我同时在详细列表中找到的东西,我不知道它是否重要

在Passenger文档中,我发现sub-uri问题对于除Rails之外的所有类型的应用都是严重的,Rails有一个纯Passenger解决方案。整个事件没有很好的记录。但是node.js文档()中确实有一个警告:

在Passenger GitHub问题列表中,我创建了一个关于“使用url重写”的文档详细信息请求,因为在大多数情况下,这似乎是唯一真正可行的答案()。对于我来说,为我们想要运行的每个不同的node.js应用程序找出特定于案例的修复是不可行的


为了让每个人都了解这种情况,Passenger框架结构确实可以将服务器引导到正确的文件夹,但是当需要实际执行应用程序时,nginx&Passenger,出于我不理解的原因,恢复运行他们在配置文件中找到的第一个应用程序。只要你解决了这个问题,让每个应用都知道如何调用——也许nginx会阅读他们的公告??——那么这就行了

我了解了有关该问题的更多详细信息,并提交了一份错误报告:。最有趣的部分是子uri代码被处理,但当应用程序最终启动时,它总是链接到指定的第一个路径。希望很快就能得到答案。我了解了有关该问题的更多细节,并提交了一份错误报告:。最有趣的部分是子uri代码被处理,但当应用程序最终启动时,它总是链接到指定的第一个路径。希望能很快得到答复。