Nginx 多站点配置实例详解

Nginx 多站点配置实例详解

在一台 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 都能访问了。

感谢阅读,希望能帮助到大家,谢谢大家,对本站的支持!

参与评论