Nginx配置详解

源引:http://www.cnblogs.com/knowledgesea/p/5175711.html

Nginx常用功能

一、代理:尤其是反向代理。

正向代理与反向代理

二、负载均衡

负载均衡策略有2种:

  • 内置策略
  • 扩展策略

1、内置策略

1)轮询 、加权轮询。
轮询和加权轮询
2) IP hash算法

对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

IP hash算法

2、扩展策略

你可以参照所有的负载均衡算法,给他一一找出来并做实现。

3、web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

4、Nginx相关地址

源码:https://trac.nginx.org/nginx/browser
官网:http://www.nginx.org/

三、Nginx配置文件结构

打开conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。

1、默认配置
#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 koi8-r; 
         #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; 
         #} 
     } 
     # 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 ssl; 
     #       server_name localhost; 
     #       ssl_certificate cert.pem; 
     #       ssl_certificate_key cert.key; 
     #       ssl_session_cache shared:SSL:1m; 
     #       ssl_session_timeout 5m; 
     #       ssl_ciphers HIGH:!aNULL:!MD5; 
     #       ssl_prefer_server_ciphers on; 
     #       location   /   { 
     #             root html; 
     #             index index.html index.htm; 
     #       } 
     # }
}
2、nginx文件结构
#全局块
... 
#events块 
events {  
      ...
}
#http块
http {
      #http全局块 
      ... 
      #server块 
      server   {    
            #server全局块
            ......
            #location块 
            location [PATTERN] {      
                  ...... 
            } 
            location [PATTERN] { 
                 ... 
             } 
       } 
       server { 
                  ... 
        }
    #http全局块
    ...     
}
1)、全局块:

配置影响nginx全局的指令。一般有:

  • 运行nginx服务器的用户组;
  • nginx进程pid存放路径;
  • 日志存放路径;
  • 配置文件引入;
  • 允许生成worker process数等
2)、events块:

配置影响nginx服务器或与用户的网络连接。

  • 每个进程的最大连接数
  • 选取哪种事件驱动模型处理连接请求
  • 是否允许同时接受多个网路连接
  • 开启多个网络连接序列化等。
3、http块:

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:

配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:

配置请求的路由,以及各种页面的处理情况。

########### 每个指令必须有分号结束。##################
user administrator administrators;       #配置用户或者组,默认为nobody nobody。
#worker_processes 2;                     #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;               #指定nginx进程运行文件存放地址
error_log log/error.log debug;           #指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:
#debug|info|notice|warn|error|crit|alert|emerg
events { 
      accept_mutex on;     #设置网路连接序列化,防止惊群现象发生,默认为on       
      multi_accept on;     #设置一个进程是否同时接受多个网络连接,默认为off 
      #use epoll;           #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport   
      worker_connections 1024;   #最大连接数,默认为512
}
http   { 
      include mime.types;                       #文件扩展名与文件类型映射表 
      default_type application/octet-stream;   #默认文件类型,默认为text/plain 
      # 配置跨域问题
      add_header Access-Control-Allow-Origin *;  ##全匹配方式。
      add_header Access-Control-Allow-Headers X-Requested-With;
      add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

      #access_log off;                         #取消服务日志 
      log_format   myFormat   '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; 
      #自定义log格式 
      access_log log/access.log myFormat;       #combined  为日志格式的默认值   
      sendfile on;                              #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 
      sendfile_max_chunk 100k;                  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 
      server_names_hash_bucket_size 64;         #hash表可保存服务器名字的数量(32的倍数)
      keepalive_timeout 65;                     #连接超时时间,默认为75s,可以在http,server,location块。 
      upstream mysvr { 
            server 127.0.0.1:7878; 
            server 192.168.10.121:3333 
            backup;     #热备 
      } 
      error_page 404 https://www.baidu.com;     #错误页 
      server { 
            keepalive_requests 120;              #单连接请求上限次数。 
            listen 4545;                         #监听端口 
            server_name 127.0.0.1;               #监听地址,不需要加http:// 
            location   ~*^.+$ {                  #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 
                  #root path;                    #根目录 
                  #index vv.txt;                 #设置默认页 
                  proxy_pass http://mysvr;       #请求转向mysvr 定义的服务器列表 
                  deny 127.0.0.1;                #拒绝的ip 
                  allow 172.18.5.54;              #允许的ip 
            } 
       }
} 

上面是nginx的基本配置,需要注意的有以下几点:

1、
  1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址; 
  2.$remote_user :用来记录客户端用户名称; 
  3.$time_local : 用来记录访问时间与时区;
  4.$request : 用来记录请求的url与http协议;
  5.$status : 用来记录请求状态;成功是200, 
  6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
  7.$http_referer :用来记录从那个页面链接访问过来的; 
  8.$http_user_agent :记录客户端浏览器的相关信息;
2、惊群现象:
  一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。
3、每个指令必须有分号结束
4、启动与停止
#启动
$ sudo /etc/init.d/nginx
或
$ nginx    (如果你配置了环境变量)

# 重启
$ nginx -s reload

#停止
$ sudo service nginx stop 
或
$ ps -e | grep nginx    #查看进程ID,然后
$ kill  进程ID

四、常用指令

  • autoindex on; // 指定该目录下的所有文件可通过浏览器直接访问
示例:
location  /images/ {
    root /var/www/images/;
    autoindex on; 
}

五、安全策略配置

server {
  ###
  #   浏览器默认会对静态资源进行Content-Type 的猜测
  #  (如果没设置,或者故意设置错,比如一个js文件,缺被黑客设置成为image/png),
  #  设置 X-Content-Type-Options "nosniff" ,禁止浏览器进行猜测。
  ##
  add_header X-Content-Type-Options "nosniff";
  ##
  #  如果发现有跨站攻击,则立刻停止页面服务
  ##
  add_header X-XSS-Protection "1; mode=block";
  ##
  #  我们的网站发送请求的时候,往往在 请求头中带上 Referer,
  #  我么可以通过这个来控制。 可选值自行查询
  ##
  add_header Referrer-Policy  "no-referrer-when-downgrade";
  add_header X-Permitted-Cross-Domain-Policies 'none';
  add_header X-Download-Options 'noopen';
  ## 
  # 用于控制网站可以在哪些被允许的域名网站中以 <iframe>的形式嵌入
  # DENY :不允许被任何页面嵌入;
  # SAMEORIGIN :不允许被本域以外的页面嵌入;
  # ALLOW-FROM uri :不允许被指定的域名以外的页面嵌入(Chrome现阶段不支持);
  ##
  add_header X-Frame-Options  "SAMEORIGIN";
  ##
  # 控制当前网站只可以加载 哪里的资源
  # default-src *   表示除了单独指定的类型资源以外,其他资源都按照这个设置来
  # script-src  https://*.facebook.com http://*.facebook.com  表示 javascript 脚本的资源只能从 https://*.facebook.com http://*.facebook.com 这两个地方加载
  # style-src  https://*.facebook.com http://*.facebook.com  表示 css样式表 的资源只能从 https://*.facebook.com http://*.facebook.com 这两个地方加载
  # 还有很多,请自定查询
  ##
  add_header Content-Security-Policy default-src *;script-src https://*.facebook.com http://*.facebook.com;style-src https://*.facebook.com;
  # strict-transport-security "max-age=31536000;" # 在接下来的365天内强制使用https,需检查自己服务器是否支持https
  add_header strict-transport-security "max-age=31536000;";
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,642评论 24 1,002
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,923评论 21 356
  • nginx配置文件结构 从文件结构可知配置文件主要由一下六部分组成: main(全局设置) events(ngin...
    忘净空阅读 891评论 0 0
  • Page 1:nginx 服务器安装及配置文件详解 CentOS 6.2 x86_64 安装 nginx 1.1 ...
    xiaojianxu阅读 8,527评论 1 41