乘客suburi的

时间:2020-01-28 18:25:00

标签: nginx passenger

在大多数方面,Phusion乘客说明都很棒。他们在设置NGINX,乘客应用程序,测试python等方面的安装指南要好于平均水平。在单个服务器上设置几个单独的应用程序的说明很不完善。我采用“乘客”的主要原因是能够托管多个应用程序。

我遵循了Phusion Passenger的说明,以使用子URI(https://www.phusionpassenger.com/library/deploy/nginx/deploy/python/)设置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/mydashhttp://testapp.myexample.com/efergy时看到的是同一个应用程序。在顶部的小节之前,我可以将“ dashboard”替换为“ peniso”,并更改运行1个应用程序的位置。我已经翻转了文件夹的顺序,也将根目录从一个更改为另一个。似乎只有一个应用可用。

您如何配置“乘客”以与多个不同的应用程序一起使用?

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

1 个答案:

答案 0 :(得分:0)

我有一个特定于Python Ploty仪表板的解决方案,该仪表板使用称为Dash的抽象层编写。我希望可以为所有Plotly应用找到类似的修复程序,但是没有实现。可以修改Dash Plotly应用程序以了解通话的suburi。如果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

最后一行是我在“ Plotly”列表中同时拾取的东西,我不知道它是否至关重要。

在“乘客”文档中,我发现sub-uri问题对于除Rails以外的所有其他应用程序都非常严重,因为Rails拥有纯乘客解决方案。整个事情没有得到很好的记录。但是它们在node.js文档(https://www.phusionpassenger.com/library/deploy/nginx/deploy/nodejs/)中确实有警告:

Sub-URI deployments in Node.js require framework-specific 
adjustments in the application. For example, in Express 4.0+, 
you should use a router. An alternative is to use url 
rewriting to avoid the need for sub-URIs altogether. 

在“乘客GitHub”问题列表中,我创建了一个有关“ URL重写的使用”的文档详细信息的请求,因为在大多数情况下,这是唯一切实可行的答案(https://github.com/phusion/passenger/issues/2254)。对我想为我们要运行的每个不同的node.js应用程序找出针对案例的修复程序,对我来说都是行不通的。

为了让每个人都了解这种情况,Passenger框架结构的确可以将服务器引导到正确的文件夹,但是当我实际不执行该应用程序时(出于我不明白的原因),nginx和Passenger会恢复为运行他们在配置文件中找到的第一个应用程序。修复此问题后,每个应用程序都知道如何调用该方法(也许nginx会读取其公告?),然后此方法就可以了。

相关问题