• Nginx多站点配置的一次实践

    同时运行Django与Tornado
    服务器君一共花费 916.799 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    在一台 VPS 上,我们有时候需要同时跑几个 virtualenv。比如 virtualenv app1 跑的是 Django 的一个应用,而 virtualenv app2 跑的是 Tornado。那么如何配置 Nginx,让它同时支持这两个 virtualenv 的运行呢?

    首先是 Nginx 的主配置,位于 etc/nginx/ngnix.conf,让它保持默认就行:

    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  112.124.7.216;
            #server_name localhost;
            #if ($host != 'www.nowamagic.net' ) { 
            #    rewrite ^/(.*)$ http://www.nowamagic.net/$1 permanent; 
            #} 
    
            access_log /home/nowamagic/logs/access.log;
            error_log /home/nowamagic/logs/error.log;
    
            #root         /root/nowamagic_venv/nowamagic_pj;
            location / {
                uwsgi_pass 127.0.0.1:8077;
                #include uwsgi_params;
                include /etc/nginx/uwsgi_params;
                #uwsgi_pass 127.0.0.1:8077;
                #uwsgi_param UWSGI_SCRIPT index;
                #uwsgi_param UWSGI_PYHOME $document_root;
                #uwsgi_param UWSGI_CHDIR  $document_root;
           }
    
           location ~ \.php$ {  
               #root          html;  
               root           /var/www/html;
               fastcgi_pass   127.0.0.1:9000;  
               fastcgi_index  index.php;  
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  
               include        fastcgi_params;  
           }
    
           access_log off;
        }
    
    
        include /etc/nginx/conf.d/*.conf;
    }
    
    

    注意到这一句,include /etc/nginx/conf.d/*.conf; 它会加载 conf.d 文件夹下的所有配置文件。那么接下来的事情就简单了,我们设计两个 .conf ,一个是 django 的配置,一个是 tornado 的配置。

    1. app1_django.conf

    server {
        listen       80;
        server_name  112.124.7.216;
        #server_name localhost;
        #if ($host != 'www.imofa.net' ) { 
        #    rewrite ^/(.*)$ http://www.imofa.net/$1 permanent; 
        #} 
    
        access_log /home/nowamagic/logs/access.log;
        error_log /home/nowamagic/logs/error.log;
    
        #root         /root/nowamagic_venv/nowamagic_pj;
        location / {
            uwsgi_pass 127.0.0.1:8077;
            #include uwsgi_params;
            include /etc/nginx/uwsgi_params;
            #uwsgi_pass 127.0.0.1:8077;
            #uwsgi_param UWSGI_SCRIPT index;
            #uwsgi_param UWSGI_PYHOME $document_root;
            #uwsgi_param UWSGI_CHDIR  $document_root;
       }
    
       location ~ \.php$ {  
           #root          html;  
           root           /var/www/html;
           fastcgi_pass   127.0.0.1:9000;  
           fastcgi_index  index.php;  
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  
           include        fastcgi_params;  
       }
    
       access_log off;
    }
    

    下面是 tornado 的配置:

    2. app2_tornado.conf

    upstream tornado {
        server 127.0.0.1:8888;
    }
     
    server {
        listen   80;
        root /root/nmapp2_venv;
        index index.py index.html;
     
        server_name server;
     
        location / {
            #if (!-e $request_filename) {
            #    rewrite ^/(.*)$ /index.py/$1 last;
            #}
        }
     
        location ~ /index\.py {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://tornado;
        }
    }
    

    重启 Nginx:

    service nginx restart
    

    OK,两个虚拟环境的 app 都能访问了。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] urls.py设置技巧 8 个条目
  2. [Python程序设计] Django Web环境配置 2 个条目
  3. [Python程序设计] Django架构流程分析 7 个条目
  4. [数据库技术] MySQL中英文混合排序 4 个条目
  5. [数据库技术] 数据库范式篇 5 个条目
  6. [PHP程序设计] Nginx基本操作释疑 7 个条目
  7. [Python程序设计] Python语言概述 6 个条目
  8. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  9. [PHP程序设计] PHP与函数式编程 1 个条目
  10. [计算机算法] TAOCP与算法 12 个条目
  11. [PHP程序设计] PHP与Stream流 5 个条目
  12. [软件工程与项目管理] 了解一点WebKit 9 个条目
窗口 -- [资讯]