您的位置:首页 > 运维架构 > Nginx

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 conf 配置