windows下nginx+FastCGI+Django攻略

   Django的部署可以有很多方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。

在這種方式中,我們的通常做法是,將nginx作爲服務器最前端,它將接收WEB的所有請求,統一管理請求。nginx把所有靜態請求自己來處理(這是NGINX的強項)。然後,NGINX將所有非靜態請求通過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。可見,uwsgi的作用就類似一個橋接器。起到橋樑的作用。(NOTE:不使用nginx,只使用uwsgi+django也是可以實現WEB服務的。uwsgi也可以直接處理WEB請求。)  

   首先確保你的電腦裏已經安裝了Python和Django,接下來我們還需要兩個組件,nginx服務器     和flup(Python的FastCGI組件)

   nginx下載地址:http://nginx.org/en/download.html

   flup下載地址:http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz

   與Linux下不同的是,nginx在windows下是以一個應用程序的方式運行,而不是以一個服務運行(難怪沒人在windows服務器上用nginx),把剛剛下載好的兩個壓縮包都解壓到C:\nginx\, C:\flup\(目錄可自己選擇,這裏只做個演示)然後用python setup.py install 命令,安裝flup,接着就要配置nginx了,打開C:\nginx\conf\nginx.conf,我的配置文件如下,大家可根據需要自行修改:

  1. #user  nobody;  

  2. worker_processes  1;  

  3. #error_log  logs/error.log;  

  4. #error_log  logs/error.log  notice;  

  5. #error_log  logs/error.log  info;  

  6. #pid        logs/nginx.pid;  

  7. events {  

  8.    worker_connections  1024;  

  9. }  

  10. http {  

  11.    include       mime.types;  

  12.    default_type  application/octet-stream;  

  13.    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  

  14.    #                  '$status $body_bytes_sent "$http_referer" '  

  15.    #                  '"$http_user_agent" "$http_x_forwarded_for"';  

  16.    #access_log  logs/access.log  main;  

  17.    sendfile        on;  

  18.    #tcp_nopush     on;  

  19.    #keepalive_timeout  0;  

  20.    keepalive_timeout  65;  

  21.    #gzip  on;  

  22.    server {  

  23.        listen       80;  

  24.        server_name  localhost;  

  25.        #charset koi8-r;  

  26.        #access_log  logs/host.access.log  main;  

  27.        location / {  

  28.            root   html;  

  29.            index  index.html index.htm;  

  30.        }  

  31.        #error_page  404              /404.html;  

  32.        # redirect server error pages to the static page /50x.html  

  33.        #  

  34.        error_page   500 502 503 504  /50x.html;  

  35. location = /50x.html {  

  36.            root   html;  

  37.        }  

  38.        # proxy the PHP scripts to Apache listening on 127.0.0.1:80  

  39.        #  

  40.        #location ~ \.php$ {  

  41.        #    proxy_pass   http://127.0.0.1;  

  42.        #}  

  43.        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  

  44.        #  

  45.        #location ~ \.php$ {  

  46.        #    root           html;  

  47.        #    fastcgi_pass   127.0.0.1:9000;  

  48.        #    fastcgi_index  index.php;  

  49.        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  

  50.        #    include        fastcgi_params;  

  51.        #}  

  52.        # deny access to .htaccess files, if Apache's document root  

  53.        # concurs with nginx's one  

  54.        #  

  55.        #location ~ /\.ht {  

  56.        #    deny  all;  

  57.        #}  

  58.        # 靜態資源  

  59.        location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|js)$  

  60.        {  

  61.            root e:/gin/gin/;  

  62.            expires 30d;  

  63.            break;  

  64.        }  

  65.        location ~ ^/static/ {  

  66.            root e:/gin/gin/;  

  67.            expires 30d;  

  68.            break;  

  69.        }  

  70.        location ~ ^/ {  

  71.            # 指定 fastcgi 的主機和端口  

  72.            fastcgi_pass 127.0.0.1:8051;  

  73.            fastcgi_param PATH_INFO $fastcgi_script_name;  

  74.            fastcgi_param REQUEST_METHOD $request_method;  

  75.            fastcgi_param QUERY_STRING $query_string;  

  76.            fastcgi_param CONTENT_TYPE $content_type;  

  77.            fastcgi_param CONTENT_LENGTH $content_length;  

  78.            fastcgi_param SERVER_PROTOCOL $server_protocol;  

  79.            fastcgi_param SERVER_PORT $server_port;  

  80.            fastcgi_param SERVER_NAME $server_name;  

  81.            fastcgi_pass_header Authorization;  

  82.            fastcgi_intercept_errors off;  

  83.        }  

  84.    }  

  85.    # another virtual host using mix of IP-, name-, and port-based configuration  

  86.    #  

  87.    #server {  

  88.    #    listen       8000;  

  89.    #    listen       somename:8080;  

  90.    #    server_name  somename  alias  another.alias;  

  91.    #    location / {  

  92.    #        root   html;  

  93.    #        index  index.html index.htm;  

  94.    #    }  

  95.    #}  

  96.    # HTTPS server  

  97.    #  

  98.    #server {  

  99.    #    listen       443;  

  100.    #    server_name  localhost;  

  101.    #    ssl                  on;  

  102.    #    ssl_certificate      cert.pem;  

  103.    #    ssl_certificate_key  cert.key;  

  104.    #    ssl_session_timeout  5m;  

  105.    #    ssl_protocols  SSLv2 SSLv3 TLSv1;  

  106.    #    ssl_ciphers  HIGH:!aNULL:!MD5;  

  107.    #    ssl_prefer_server_ciphers   on;  

  108.    #    location / {  

  109.    #        root   html;  

  110.    #        index  index.html index.htm;  

  111.    #    }  

  112.    #}  

}  

  • 需要注意的是,對於不需要url rewrite的目錄,比如存放css和圖片的目錄,需要在配置文件裏指明,否則將無法訪問這些文件

    1
    2
    3
    4
    5
    
            location ~ ^/static/ {
                root e:/gin/gin/;
                expires 30d;
                break;
            }

  • 最後一步就是運行nginx服務器,並且用FastCGI運行你的Django項目了
    進入nginx的目錄:

    cd c:\nginx\
    start nginx
  • 然後在瀏覽器裏訪問http://loaclhost/ 就應該可以看到nginx的歡迎界面了。最後進入你的Django項目的根目錄,然後用一下命令來運行服務器:

1
    python manage.py runfcgi method=threaded host=127.0.0.1 port=8051
  • 刷新localhost頁面,你就能看到你的項目主頁啦~~
    補充一點windwos下nginx操作的命令(來自官方文檔)

nginx -s stop quick exit
nginx -s quit graceful quit
nginx -s reload changing configuration, starting a new worker, quitting an old worker gracefully
nginx -s reopen reopening log files

轉載初處:http://blog.csdn.net/yangchao228/article/details/7583868







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章