Nginx基本配置


About Nginx

  • created in 2004
    • High performance, High Concurrency, Low Memory
    • webserver
    • load balancer / reverse proxy

Nginx vs Apache

  • Basic Architecture
    • Apache多个进程,每个进程起一个处理一个请求,
    • Nginx多个进程,每个进程可以实现并发处理多个请求,反向代理
  • Resource Usage
    • Apache每个进程都及时处理静态资源的请求也需要加载php等语言环境,有一定overhead的损耗
    • Nginx对静态资源不需要加载语言环境
  • Performance
  • Configuration
    • Nginx使用URI定位资源
    • Apache使用文件路径定位资源

Install Nginx

  • 使用Package Manger
    • apt-get install nginx
  • 配置文件路径
    • /etc/nginx
  • 日志路径
    • /var/log/nginx/error.log
  • Check Nginx Status
    • ps aux | grep nginx
  • pid路径
    • /var/run/nginx.pid
    • /run/ngix.pid
  • 启动/结束
    • %sudo nginx
    • %sudo service nginx start
    • %sudo service nginx restart
    • %sudo nginx -s stop
  • 使用Systemd标准化Linux任务
    • 路径: /lib/systemd/system/nginx.service
    • 修改nginx.service为: Nginx Systemd Service Config
    • 修改完成后reload配置文件
      • %sudo systemctl daemon-reload
  • 后序所有操作均使用systemd
    • %sudo systemctl status nginx
    • %sudo systemctl start nginx
    • %sudo systemctl stop nginx
  • 配置nginx自动启动
    • %sudo systemctl enable nginx

配置文件基本结构

  • directive, ngix.conf中的键值对
    • 同名的子directive可以覆盖上一级的directive
        //注意分号
        sendfile on;
      
  • context,nginx.conf中的section
    • context类似scope可被嵌套和继承父类的配置
    • global context用来配置所有的master
      #global context
      user www www;
      error_log /var/log/nginx/error.log
      pid /run/niginx.pid
    
      events{
          worker_connection 4096;
      }
    
      #http context
      http {
          index.html index index.htm
    
          #server #1
          server{
              listen 80;
              server_name: domain.com;
              access_log /var/log/domain.access.log.main;
              root html;
    
              //location用来路由路径
              location / some_path{
                  add_header header_name header_value;
              }
          }
          #server #2
          server{
              listen 455;
                
          }
      }
    
  • 配置一个基本的Static Website

      events{}
      http{
          #inlcude mime types for front-end
          include /etc/nginx/mime.types;
          #每个server host用一个server来表示
          server{
              listen 80;
              domain abc.com www.abc.com
              root /usr/home/xx/site/
          }
      }
    

Location Blocks

server{

    #prefix match
    #match: domain/greet/, domain/greeting/, domain/greet/more 
    location /greet{
        //处理个别路径的请求
        return 200 "Hello From Nginx From /Greet"
    }

    #Exact match
    #match: domain/greet/
    location =/greet{
        //处理个别路径的请求
        return 200 "Hello From Nginx From /Greet"
    }

    #Regular Expression match, case sensitave
    #match: domain/greet0/, domain/greet2/, ...domain/greet9/
    location ~/greet[0-9]{
        //处理个别路径的请求
        return 200 "Hello From Nginx From /Greet"
    }

    #Regular Expression match, case insensitave
    #match: domain/greet0/, domain/greet2/, ...domain/greet9/
    location ~*/greet[0-9]{
        //处理个别路径的请求
        return 200 "Hello From Nginx From /Greet"
    }
}

Nginx对location的匹配规则为,优先级由低到高如下

  1. Exact Match = uri
  2. Preferential Prefix Match ^~uri
  3. REGEX Match ~* uri
  4. Prefix Match uri

对所有的子路径,可以配置

location / {
    #如果当前路径不存在,指向404
    try_files $uri $uri/ =404
}

Security

如果某个URL只允许管理员访问,可以在Nginx中配置用户名和密码认证

location / {
    auth_basic "Secure Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    try_files $uri $uri/ =404;
}

用户名和密码可以使用apach2-utils

% sudo apt-get install apache2-utils
% htpasswd -c /etc/nginx/.htpasswd user_name
% cat /etc/nginx/.htpasswd

其它一些常用的安全配置

http{
    #hide nginx version from HTTP header
    server_tokens off;
    
    server{
        #放置页面被其它网站用iframe嵌入
        add_header X-Frame-Options "SAMEORIGIN";
        #Cross-site scripting protection
        add_header X-XSS-Protection "1; mode-block";
    }
}

模板语言

Nginx配置中可以使用两类变量

  • Configuration Variables
    • set $var 'somethig'
  • NGINX Module Variables
    • $http, $uri, $args
    • Built-in variables
  • 常用的变量
    • $host: domain.com
    • $uri : /inspect
  • 逻辑控制
if ($arg_apikey != 1234 ){
    return 401 "Incorrect API key"
}
#使用自定义变量
set $weekend 'No';
#正则匹配
if( $date_local ~ 'Saturday|Sunday'){
    set $weekend 'Yes';
}
location /is_weekend{
    return 200 $weekend;
}

Redirect

  • rewrite pattern URI

rewrite url进行重新路由

rewrite ^/usr/w+ /greet;  #将^/usr/w+ 路由到/greet
  • return status URI
    • 成功返回字符串:return 200 some_string
    • 重定向返回路径:return 301 https://$host$request_uri
      #HTTPs 重定向
      server{
          listen 80;
          server_name xta0.me www.xta0.me;
              return 301 https://$host$request_uri;
      }
    

Logs

查看log路径ls -al /var/log/nginx,可以根据不同的server配置不同的log

location /secure {
    access_log /var/log/nginx/secure.access.log;
    #关闭log
    access_log off;
}

Worker Process

Nginx启动后Master Process会启动一个worker process来处理HTTP请求

//master process
//pid #30704
root 30704 0.0 0.1 125108 1492 ? Ss 10:59 0:00 nginx: master process 

//worker process
//pid #30706
www-data 30706 0.0 0.3 125464  3288 ? S 10:59 0:00 nginx: worker process

我们可以配置worker process的数量, 在配置文件的global context中指定

work_processers: 2 #产生2个子进程

Nginx的设计是多进程,每个CPU一个进程,在一个进程内增加多个worker_processer并不能提高效率,因为并未实现真正的并发,只是CPU轮训。可通过下面命令查看CPU状态

% nproc
% lscpu

Nginx提供了一种自动配置worker processers的directive,当CPU个数增加时,Nginx的master会自动增加worker_processers的个数

worker_processers: auto;

对于每个worker_processer,可以配置其最大并发连接数,该数值和系统能力相关,可使用%ulimit -n查看

events{
    worker_connections: 1024;
}

Buffers & Timeouts

Buffer是Nginx用来缓存Response或者Request的内存区,配置如下:

# Buffer size for POST submissions
client_body_buffer_size 10K;
client_max_body_size 8m;

# Buffer size for Headers
client_header_buffer_size 1k;

# Max time to receive client headers/body
client_body_timeout 12;
client_header_timeout 12;

# Max time to keep a connection open for
keepalive_timeout 15;

# Max time for the client accept/receive a response
send_timeout 10;

# Skip buffering for static files
sendfile on;

# Optimise sendfile packets
tcp_nopush on;

Headers & Epires

Nginx可以通过配置文件向HTTP response的Header中插入字段,一个常用的配置是对静态资源做浏览器级别的缓存,减少对server的频繁调用

#正则匹配图片请求
location  ~* \.(jpg|png|jpeg){
    access_log off;
    add_haeder Cache-Control public;
    add_header Pragma public;
    add_header Vary Accept-Encoding;
    expires 60m; #60 mins
}

Gzip

打开HTTP gzip module

gzip on;
#set to 3 or 4
gzip_comp_level 3; 
gzip_types text/css
gzip_types text/javascript

HTTP2

HTTP2支持

  1. Binary Protol 传输二进制而不是plain/text
  2. Compressed Header 头部压缩,省空间
  3. Persistent Connections 短链改长链,减少频繁建立短连接的开销
  4. Multiplex Streaming 多路复用,合并资源请求
  5. Server Push 支持push

Resources

  • Nginx Doc
  • Nginx Configuration Example
  • Nginx Config Pitfalls
  • Nginx Tutorial DigistalOCean
  • Nginx Resources Github

玻璃钢生产厂家新乡玻璃钢浮雕厂家直销洛阳玻璃钢休闲椅厂家直销厦门玻璃钢花箱批发南京玻璃钢设备外壳多少钱怀化玻璃钢前台制作南昌玻璃钢餐桌椅厂家直销昭通玻璃钢花池厂家巴中玻璃钢摆件加工镇江玻璃钢浮雕生产厂家莆田玻璃钢餐桌椅制造无锡玻璃钢花池制造武汉玻璃钢坐凳哪家好滨州玻璃钢浮雕白城玻璃钢摆件加工娄底玻璃钢树池多少钱唐山玻璃钢雕塑加工拉萨玻璃钢人物雕塑公司吴忠玻璃钢餐桌椅定制新乡玻璃钢花槽定制山东玻璃钢花钵厂家兰州玻璃钢花盆厂家邯郸玻璃钢机械外壳厂南充玻璃钢花坛多少钱大连玻璃钢造型生产厂家娄底玻璃钢家具哪家好长治玻璃钢树池坐凳多少钱平凉玻璃钢公仔雕塑公司鹰潭玻璃钢花坛定做三明玻璃钢坐凳哪家好潍坊玻璃钢座椅批发香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化