我该如何在一台服务器上托管多个Pylons网站?
我现在在我的服务器上有一个用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来实现这个功能。
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
希望这些对你有帮助。