当前位置: 代码迷 >> 开源软件 >> 解读nginx配备
  详细解决方案

解读nginx配备

热度:2519   发布时间:2013-02-26 00:00:00.0
解读nginx配置
  • 一般主文件nginx.conf
user  jianer users; #执行worker的用户worker_processes  4; #worker启动的个数,应该为CPU核心数+1,能达到最大效率error_log  logs/error.log;#错误日志记录的位置pid        logs/nginx.pid; #记录主nginx启动的PID文件events {    use epoll; #定义I/O使用模型    worker_connections  10240; #每个worker最多能处理的连接。总连接数为worker_processes*worker_connections,根据实际运行情况来动态调整}http { #除了定义http服务外,还可以定义https服务    include kelude/*.upstream; #导入外部的文件,nginx中可以导入任意可读的文件作为配置文件一部分    include       mime.types; #导入文件类型    default_type  application/octet-stream; #默认的文件类型    proxy_intercept_errors on; # 打开后,应用的状态码可以传到nginx,再处理    fastcgi_intercept_errors on; #打开后,nginx可以自定义错误码的页面显示处理    #定义日志格式,main只是一个标识,后面的内容才是格式内容    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '              '$status $body_bytes_sent "$http_referer" '              '"$http_user_agent" "$http_x_forwarded_for"'              ' request_time:$request_time s';    access_log  logs/access.log  main; #access.log对应的位置    sendfile        on; #使用xsendfile功能去存放资料的盘中下载这个文件,不用web服务器再去处理,可以有效提升文件下载效率    keepalive_timeout  65; #超过这个时间,表示应用未响应,返回504或者路由到下一个upstream    client_max_body_size 50m; #指定最大的body内容    gzip  on; #开启gzip压缩编码方式    include kelude/*.server; #加载其他配置,可以用*表示任意字符,批量加载文件}
?
  • server示例
server {    listen 80; #可以写相同的端口多次,server_name不一样即可    server_name daily.kelude2.taobao.net; #hostname    access_log logs/kelude2.log main; #访问日志重新定义    location  / {        rewrite  ^/(.*)$  http://daily.kelude.taobao.net/$1  permanent; #重写所有URL到另外的URL,浏览器会返回301    }}
?
  • Location优先级
    1、 ~*不区分大小写    2、 ~区分大小写    3、 location = 大于 location ^~ 大于 location ~/*~ 大于 location /
  • Location示例

Location的作用是将url进行规则的解析,然后指定哪些URL该由哪些Location来处理,一个url可以同时被多个Location处理,比如先rewrite一下,再去另外的Location匹配处理

location ^~ /projects {        proxy_pass http://project_service; #可以直接指定upstream,不指定后续URL,这样会自动proxy_pass到http://project_service/projects        proxy_set_header   Host             $host;        proxy_set_header   X-Real-IP        $remote_addr;        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location ^~ /pm {        proxy_pass http://10.235.168.91:18009/pm; #也可以指定好proxy_pass的具体路径,通常情况下都是后缀一致        proxy_set_header   Host             $host; #设定好此项,可以将响应头中的Host设置为当前server的hostname        proxy_set_header   X-Real-IP        $remote_addr; #设定好此项,可以在Header中设置好用户的真实IP        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; #设定好此项,可以将用户的Proxy路径显示出来。比如从10.13.24.24到10.232.23.23的nginx,10.232.23.23的nginx又proxy_pass到了10.232.23.43,那么10.232.23.43返回的X-Forwarded-For即为10.13.24.24,10.232.23.23,10.232.23.43}location ~* \.(css|js|gif|jpg|jpeg|png|bmp|ico|cur)$ { #配置静态文件        proxy_pass http://master_service;        expires 30d; #过期时间是Header中的Date+30天}location ^~ /athrun/static/athrun { #高级配置示例,有变量,有if判断,动态proxy        resolver 8.8.8.8;        set $h "invalid";        if ( $arg_token ~ "10321" ){              set $h "10.13.40.81";        }        if ( $h ~ "invalid"){              return 404;        }        proxy_pass http://$h/athrun/$name;}location  / { #所以规则未匹配时,匹配到此规则        proxy_pass http://master_service;        proxy_set_header   Host             $host;        proxy_set_header   X-Real-IP        $remote_addr;        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location ~ /\.svn/* { #拒绝路径中带.svn的,都返回403状态        deny all;}location = /test_403 { #配置一个最高优先级的location。访问http://hostname/test_403 肯定会到由此location来解析        return 403;}

?

  • upstream示例

一个upstream表示一个源,可以是应用,可以是另外的http服务器。一个upstream可以写多个server,如果写多个的话,可以有几种转发方式

upstream mypage_service {        server 10.232.23.42:4002; #几种方式:轮洵(默认,依次处理)、weigt(指定权重,任意正整数)、ip_hash(同一IP到只会到同一台,防止session失效)、fair(响应时间路由,响应越快的,得到的路由越多)/url_hash(同一URL只会到同一台server) }

?