我该如何在一台服务器上托管多个Pylons网站?

0 投票
2 回答
595 浏览
提问于 2025-04-16 05:23

我现在在我的服务器上有一个用Pylons搭建的网站,使用nginx作为Paster的代理。最近,我打算在同一服务器上再托管一个Pylons网站。

如果我继续用nginx和Paster的组合,那就意味着我需要在不同的端口上运行两个Paster实例,然后用一个nginx服务器来转发请求到127.0.0.1:808(1|2)。

这样同时运行两个Paster服务器来支持两个不同的网站,听起来不是个好主意。如果我在服务器上有10个Pylons网站,那就意味着要运行10个Paster服务器实例……

那么,有什么更好的解决方案呢?

2 个回答

1

你可以用一个paster实例来启动多个应用程序。下面的链接有一篇不错的文章,讲解了如何使用paster的urlmap来实现这个功能。

http://countergram.com/pylons-virtual-host-multiple-domain

1

我觉得运行几个paster实例没什么问题,但你应该考虑使用FastCGI(或者wsgi)和虚拟主机,因为这样更适合“生产环境”。

这里有一个使用FastCGI的例子:

pid         /var/run/nginx.pid;
user            www;
worker_processes    1;

events {
    worker_connections  1024;
}

http {
    include     /etc/mime.types;
    default_type    application/octet-stream;

    sendfile        on;
    gzip            on;
    keepalive_timeout   65;

    # First site
    server {
        listen *:443;
        server_name     first.example.com;

        ssl         on;
        ssl_certificate     /etc/www/cert.pem;
        ssl_certificate_key /etc/www/key.pem;
        ssl_session_timeout 5m;
        ssl_protocols       SSLv3 TLSv1;

        location / {
            fastcgi_pass            127.0.0.1:9000;
            fastcgi_param PATH_INFO     $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD    $request_method;
            fastcgi_param QUERY_STRING  $query_string;
            fastcgi_param CONTENT_TYPE  $content_type;
            fastcgi_param CONTENT_LENGTH    $content_length;
            fastcgi_param REMOTE_ADDR   $remote_addr;
            fastcgi_param SERVER_ADDR   $server_addr;
            fastcgi_param SERVER_PORT   $server_port;
            fastcgi_param SERVER_NAME   $server_name;
            fastcgi_param SERVER_PROTOCOL   $server_protocol;
            fastcgi_param HTTPS     on;
            fastcgi_pass_header     Authorization;
            fastcgi_intercept_errors    off;
        }
        access_log  /var/log/first.access.log main;
        error_log   /var/log/first.error.log;
    }
    # Second site
    server {
        listen *:443;
        server_name     second.example.com;

        ssl            on;
        ssl_certificate        /etc/www/cert1.pem;
        ssl_certificate_key    /etc/www/key1.pem;
        ssl_session_timeout    5m;
        ssl_protocols        SSLv3 TLSv1;

        location / {
            fastcgi_pass            127.0.0.1:9001;
            fastcgi_param PATH_INFO        $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD    $request_method;
            fastcgi_param QUERY_STRING    $query_string;
            fastcgi_param CONTENT_TYPE    $content_type;
            fastcgi_param CONTENT_LENGTH    $content_length;
            fastcgi_param REMOTE_ADDR    $remote_addr;
            fastcgi_param SERVER_ADDR    $server_addr;
            fastcgi_param SERVER_PORT    $server_port;
            fastcgi_param SERVER_NAME    $server_name;
            fastcgi_param SERVER_PROTOCOL    $server_protocol;
            fastcgi_param HTTPS        on;
            fastcgi_pass_header        Authorization;
            fastcgi_intercept_errors    off;
        }
        access_log    /var/log/second.access.log main;
        error_log    /var/log/second.error.log;
    }
}

现在,你有两个网站:

first.example.com -> localhost:9000
second.example.com -> localhost:9001

你还可以在“监听”中设置IP,比如:

listen 192.168.1.1:443;
listen 192.168.1.2:443;

这样你就可以用IP地址而不是域名了。

对于Pylons应用,你应该把配置改成FastCGI:

[server:main]
use = egg:Flup#fcgi_thread
host = 127.0.0.1
port = 9000

第一个主机的配置是这样的,第二个主机的配置是:

[server:main]
use = egg:Flup#fcgi_thread
host = 127.0.0.1
port = 9001

希望这些对你有帮助。

撰写回答