windows环境下用nginx+FastCGI方式运行Django

来源:互联网 发布:杰西卡兰格演技知乎 编辑:程序博客网 时间:2024/06/06 03:01

最近几天在写一个蛋疼的Django项目,前些天调试一直是用Django自带的HTTP服务器,不过最近可能要先部署一些东西,为了更加接近真实的服务器环境,决定用FastCGI的方式试试。服务器选择了nginx,本来是计划在CentOS下试验的,不过由于CentOS还要安装,出于懒人的做法,就直接在自己的windows里试试了。

首先确保你的电脑里已经安装了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/(目录可自己选择,这里只做个演示)然后用

1
python setup.py install

安装flup,接着就要配置nginx了,打开C:/nginx/conf/nginx.conf,我的配置文件如下,大家可根据需要自行修改:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
#user  nobody;worker_processes  1; #error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info; #pid        logs/nginx.pid; events {    worker_connections  1024;} http {    include       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  logs/access.log  main;     sendfile        on;    #tcp_nopush     on;     #keepalive_timeout  0;    keepalive_timeout  65;     #gzip  on;     server {        listen       80;        server_name  localhost;         #charset utf-8;         #access_log  logs/host.access.log  main;         #location / {        #    root   html;        #    index  index.html index.htm;        #}         #error_page  404              /404.html;         # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }         # proxy the PHP scripts to Apache listening on 127.0.0.1:80        #        #location ~ /.php$ {        #    proxy_pass   http://127.0.0.1;        #}         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #        #location ~ /.php$ {        #    root           html;        #    fastcgi_pass   127.0.0.1:9000;        #    fastcgi_index  index.php;        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;        #    include        fastcgi_params;        #}         # deny access to .htaccess files, if Apache's document root        # concurs with nginx's one        #        #location ~ //.ht {        #    deny  all;        #}         # 静态资源        location ~* ^.+/.(html|jpg|jpeg|gif|png|ico|css|js)$        {            root e:/gin/gin/;            expires 30d;            break;        }         location ~ ^/static/ {            root e:/gin/gin/;            expires 30d;            break;        }          location / {            # 指定 fastcgi 的主机和端口            fastcgi_pass 127.0.0.1:8051;            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 SERVER_PROTOCOL $server_protocol;            fastcgi_param SERVER_PORT $server_port;            fastcgi_param SERVER_NAME $server_name;            fastcgi_pass_header Authorization;            fastcgi_intercept_errors off;        }    }     # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}     # HTTPS server    #    #server {    #    listen       443;    #    server_name  localhost;     #    ssl                  on;    #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;     #    ssl_session_timeout  5m;     #    ssl_protocols  SSLv2 SSLv3 TLSv1;    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;    #    ssl_prefer_server_ciphers   on;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #} }

需要注意的是,对于不需要url rewrite的目录,比如存放css和图片的目录,需要在配置文件里指明,否则将无法访问这些文件

12345
        location ~ ^/static/ {            root e:/gin/gin/;            expires 30d;            break;        }

最后一步就是运行nginx服务器,并且用FastCGI运行你的Django项目了
进入nginx的目录:

12
    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 stopquick exit
nginx -s quitgraceful quit
nginx -s reload changing configuration, starting a new worker, quitting an old worker gracefully
nginx -s reopenreopening log files

原创粉丝点击