nginx配置说明
2013-11-27 18:41
399 查看
观察nginx的安装目录
对于安装完一个程序,我最想知道的就是它在我的电脑都做了些什么,这样才会感到踏实。其实安装程序就是 把可执行文件,还有一些配置文件按照一定的组织方式放在一些地方。因此我们最应该要知道的就是它安装在 哪里了。当然这里讲的都是默认安装的情况下,如果是自己配置安装,那当然是一清二楚了。在默认安装的情况下 ,nginx被安装在/usr/local/nginx。基本所有的有关nginx的都在这个目录下。其中可执行nginx文件在sbin目录下 ,其他还有各种配置文件什么的,我们可以在这些目录下用cd,ls一个一个看过去。这样也有助于我们 消除好奇心。其实你可以在该目录下使用ll命令,你会发现实际上就只有四个目录是一般用户可以进去查看的, 其他目录都必须要管理员权限。这也近似的说明我们一般的操作只要对这四个目录进行一下操作。这四个目录分别是conf 存放一些配置文件,其中我们要重点配置就是这个目录下面的nginx.conf文件
html 这个目录默认情况下就存放了两个html文件,其中一个是index.html,很显然这是测试我们nginx 是否运行起来的测试显示文件,另外一个htnl文件也是类似作用
sbin 这个目录刚才说过了,默认情况下就是只有一个nginx的可执行文件
logs 这个目录下就只有两个文件:access.log,error.log,从名字上我们可以看出来,这是两个日志文件, 分别记录,访问日志和错误日志。
经过这些分析,是不是感觉情况变得很明了了o(∩∩)o...
web应用的基本原理
首先要有一个web服务器,它的作用就是监听某个端口号,web服务里默认都是监听80端口。就仿佛你在浏览器中输入 一个网址,然后按回车建。其实默认是在你的网址后面再加上:80,只是这个大家都是知道的,所以就不用加上 :80了。而用户输入的域名呢,经过网络中的各种转换传输,最终就会映射到你的服务器上,换句话说,就是你 的主机。也就是说,用户在浏览器中发送了一个请求到你的主机的80端口上。而你的主机正好有一个web服务器监听着 80端口。OK,这个web服务就收到用户发出的请求了。基本的过程就是这样子的。所以web服务器就像是一个看守的 人,监视着是否有人发消息过来。web服务器收到消息之后,接下就要把消息给另外的程序,处理这个消息或者是请求 ,这里有动态的和静态的两种,其实静态可以由web服务器自己直接抓取静态的东西发送给用户,但是动态的一些 就要另外的程序处理了。根据用不用的服务器端编程语言,如python,php,jsp,ruby等。针对发过来的动态请求, 用相应的程序运行处理之后,得到一个结果然后返回给服务器,服务器再发送给用户。而这个处理的过程可能又要 用到其它的东西,比如最重要的数据库。所以这些程序在处理的时候又会调用数据库。所以基本的过程就是这样子的。 至于具体的根据不用的情况会作出各种的优化。针对django和nginx,我们要引进一个fastcgi。具体的介绍可以 用google搜索。在这里简单介绍一下。它就是相当于连接web服务器和那些处理程序的。在这里就是链接nginx和 django的。负责获得web服务器给的信息。然后交给django里写的程序执行。相对来说它和django这一端关系比较紧密 至于具体fastcgi的好处,可以自行搜索。下面给个图形象展示一下:当然在实际中,web服务器担任了更加大角色。以及前面还会有均衡负载服务器等。
配置nginx服务器
上面讲到我们要使用fastcgi,因此在这里我们要安装一个python库,名字叫flup。你可以在google搜索,并且下载 到它,就想安装其它python库一样安装它就行。至此,我们最重要的一个步骤就是配置nginx的配置文件了。 就像我们刚才说过的,该配置文件在conf目录下,名字叫nginx.conf。在此,我先把自己的nginx.conf贴出来, 然后再一行一行分析:#使用的用户和组 user xc xc; #制定工作衍生进程数 worker_processes 4; #制定log存放位置 #error_log /usr/local/nginx/logs/error.log; #error_log /usr/local/nginx/logs/error.log notice; error_log /usr/local/nginx/logs/error.log info; #error_log /usr/local/nginx/logs/error.log error; #制定pid存放路径 pid /usr/local/nginx/conf/nginx.pid; #制定文件描述符数量 worker_rlimit_nofile 51200; #event模块 events { #使用网络I/O模型 linux 推介使用epoll模型 use epoll; # 允许的连接数 worker_connections 51200; } http { include mime.types; default_type application/octet-stream; #默认log的格式,名称为main log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #设置访问日志,格式为main access_log /usr/local/nginx/logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #设置压缩输出,作用是能够把信息压缩后再输出,浏览器再解压显示 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #主机配置 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #设置该网站应用中所需要的静态文件的根目录 location ~/static/ { root /home/xc/jwcsite/; # root html; # index index.html index.htm; break; } #设置静态页面的根目录,此为admin的静态页面根目录,是我再查看错误日志的时候,看到admin应用是要调用admin/css/下面的内同的,所以我就按照这种路径进行修改了 location ~/media/ { root /home/xc/jwcsite/static/; # root html; # index index.html index.htm; break; } #host and port to fastcgi server location / { fastcgi_pass 127.0.0.1:8080; 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 pass_header Authorization; fastcgi_intercept_errors off; } #设置浏览器缓存这些图片格式文件浏览器缓存时间是30天,css/js缓存时间1小时 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } #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; #} } # 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 HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
看起来有点长,不过后面灰色的内同都是注释掉的内容,只是配置文件默认就存在的。这些注释掉的内容分别是 设置反向代理和虚拟主机用的。这份配置文件在我的django应用中能够很好地使用。 强调一下,仅仅是可以使用,因此是初步的设置,具体的分析和优化还没有做
第二行的user只的是你的linux机器上你的组和你的用户名。如果不知道的话,可以在shell中输入id, 就会显示你所在的组和你的用户名。
第四行可以根据你的cpu性能进行设置,一般4个差不多了,在下面的测试, 我会讲到。
第八行,设置你的error_log的位置,而后面跟着的info表示要显示的类型,你可以分别试试,我注释掉的 同的显示,看看到底有什么不一样。
第八行,设置你存放pid的位置,在这里,当nginx启动之后,会有一个master进程,以及若干个worker进程。 当你在这里设置pid后面的路径之后,比如我这里,就会在该路径的nginx.pid中存入master进程号。 这个进程号在我们要停止nginx以及重启等有很大用处。
接下来是events模块,基本都用详细的注释,按照设置就行,其中worker_connections后面的数字, 我这里设置的比较大,其实可以小一点,一两千就够了。这里的数字是我在压力测试的时候设置的。
接下来是http模块,这些选项照抄就行,其中log_format定义了一个log的格式为main。 基本上这个格式就挺好,在后面会用到main这个格式。 access_log 和之前设置的error_log表示的意思类似。
看看http模块中的server模块,先是监听80端口,server_name我们这里就设置为localhost,也可以写127.0.0.1 我们在自己机器上都是使用这个作为测试的。location ~/static/和location ~/madia/这两个比较重要, 在这里详细讲解一下。刚才我展示了一张图片,其中当要用到静态文件的时候,是由nginx自己去抓取的。 而我们在网站应用开发的时候都会有一个static或者media文件。里面一般存放着三个文件js,css,images, 这些都是静态文件,因此我们要告诉nginx去哪里抓取静态文件。在这里location后面跟着的名字不时很重要 只要不重复就行,但是最好是有一定的代表意义。关键是root这里的设置。举个简单的例子, 假如在我们的一个htnl文件里有这么一个引用图片的语句src = "/static/images/tree.png"。 那么实际上工作的时候就会把这个路径加上root设置的路径,然后去寻图片。对于css,js也是这么寻找的。 也就是你设置完之后,这样字加起来能够成为这些静态文件的绝对路径,就没有问题了。 我这里有两个这样的设置,是因为django里面admin这个应用本身要用到静态文件,因此我就把它拷贝出来。 放到我自己的应用的static下面。但是我运行的时候,发现admin应用还是没有加载静态文件, 然后,我就打开error.log。发现在admin应用里的静态文件引用是admin/css/base.css, 于是我按照路径组合最终是绝对路径的原理。在上面加了一个admin的目录。因此我的静态文件的目录 是这样子的
/home/xc/jwcsite/- -static- -css -js -images -admin- -css -js -img
另外admin的静态文件目录如下
/usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
再接下来就是设置fastcgi模块了。这里就先照抄,只要先知道fastcgi_pass。这个是等一下启动 fastcgi的时候要用的。相当于告诉web服务器到时候怎么和fastcgi通信。很明显这里我们使用的是 tcp/ip形式。主机名加端口方式,另外还有一中unix的socket方式。大家可以看fastcgi介绍。
82行这里是设置浏览器缓存,在这里的意思就是,这些后缀名的图片在浏览器端缓存30天。 而js,css这些缓存一小时,浏览器缓存可以明显较少网络传输的负担。
启动应用
到现在为止我们已经完成了nginx的设置。可以尝试启动nginx服务器了。在这里, 我又感到一个好处,就是nginx可以由自己启动^_^。fastcgi也是由自己启动的 sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf上面这条命令可以启动nginx服务器,可以看出前面部分是nginx的可执行文件,后面是配置文件, -c表示制定配置文件。
sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
上面这条命令用于测试配置文件是否正确,如果不正确会出现提示,告诉你哪一行有错误
kill -HUP nginx主进程号
上面命令可以让nginx平滑重启,当修改过配置文件之后,就可以使用这个命令使得载入新的配置文件 其中,nginx的主进程号,可以有两种方式获得。第一种是我们在配置文件里提到的。 在我们设置的配置文件里面的那个nginx.pid存放着nginx的主进程号可以使用cat命令查看。 还有一种方法,执行下面命令
ps -ef | grep nginx
会显示出nginx的主master进程,和worker进程,master进程号就是主进程号。
kill -QUIT nginx主进程号
上面命令可以从容停止nginx
python manage.py runfcgi host=127.0.0.1 port=8080 --settings=settings
上面命令用于启动fastcgi,其中host和port就是我们之前在nginx配置文件中对fastcgi的设置。 启动安装settings.py文件的设置启动,这里我们要注意,在开发的时候,我们使用django都是 在debug模式下面的。但是,现在真正部署了,我们必须把debug设置为False。之后, 我们最好添加一些404.html,500.html这些页面增加界面友好性,我们只要自己写出这些页面, 然后扔到template的根目录下面就OK了。
好了,现在你打开浏览器,输入localhost,尽情享用你自己的网站吧。
对自己网站的测试
我在虚拟机中搭建完成之后,下载了一个webbench压力测试软件,安装很简单,直接解压 make和sudo make install。输入webbench就会显示参数帮助,一般-c表示并发数, -t表示持续时间。下面看看测试结果:
200个并发数,持续5秒,worker_processes 2 worker_connections 1024
1000个并发数,持续5秒,worker_processes 2 worker_connections 1024
3000个并发数,持续5秒,worker_processes 2 worker_connections 1024
3000个并发数,持续5秒,worker_processes 4 worker_connections 51200
5000个并发数,持续5秒,worker_processes 4 worker_connections 51200
5000个并发数,持续10秒,worker_processes 4 worker_connections 51200
相关文章推荐
- Nginx 配置参数说明
- Nginx配置文件详细说明
- Nginx配置文件详细说明
- Nginx配置文件详细说明
- Nginx配置文件详细说明
- Nginx配置文件详细说明
- 关于Nginx的详细说明和配置
- Nginx配置文件说明
- Nginx配置文件详细说明
- Nginx 配置文件nginx.conf的完整配置说明
- Nginx配置文件详细说明
- Nginx配置文件详细说明
- nginx基本配置,参数说明和启动,停止,重启
- Nginx配置参数说明
- nginx location 配置阐述优先级别使用说明
- Nginx配置文件详细说明+nginx配置tomcat负载均衡
- nginx基本配置与参数说明 相应的例子
- Nginx配置文件详细说明
- 【Nginx】配置文件详细说明
- nginx(Window下安装 & 配置文件参数说明 & 实例)