dawn-liu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

nginx的源码安装

0 安装相关软件:yum -y install pcre-devel zlib-devel openssl-devel
1 下载  nginx-1.14.0.tar.gz 
2 安装 tar xf nginx-1.14.0.tar.gz
    cd nginx-1.14.0/
    ./config --help
    ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf 
    --user=nginx --group=nginx 
    --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log 
    --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock
     --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module 
    --with-debug

3 启动: /usr/local/nginx/sbin/nginx 
4 查看:ss -tlnp  查看启动端口      ps aux  查看主进程和工作进程
nginx特性:支持epoll,aio,mmap
    master/worker,支持平滑升级

使用配置

vim /etc/profile.d/nginx.sh
     export PATH=/usr/local/nginx/sbin:$PATH
. /etc/profile.d/nginx.sh
nginx -t
nginx -s reload
nginx -h 查看命令用法

 正常运行必备的配置

    1 user USERNAME【GROUPNAME】;指定worker进程的用户和组
        user nginx nginx;
    2 pid /path/to/pid_file #pid文件

    3 worker_rlimit_nofile #;   一个工作(worker)进程打开的最大文件描述符数量

    4 worker_rlimit_sigpending#;  每个用户能够发往worker进程的信号的数量

性能优化相关的配置

1 worker_processes

1 worker_processes #; worker进程的个数,通常应该为物理cpu核心数量减1;一个留给内核使用
          可以配置为 worker_processes auto; 启动后工作进程等于cpu的个数,低版本不支持
        每个worker进程所能够响应的最大并发请求数量:
        worker_process * worker_connections

2 work_cpu_affinity

2 work_cpu_affinity cpumask cpumask...; 绑定cpu
        cupmask: 0001 0010 0100 1000
        worker_cpu_affinity 00000001 00000010 00000100 --->八颗cpu情况

3worker_priority

3 worker_priority nice:  #nice优先级
        [-20,19] 默认为0

4accept_mutex

4 accept_mutex[on|off];各worker接收用户的请求的负载均衡锁,
        为on时让多个worker轮流的系列化的响应新请求;

5lock_file 

5 lock_file /path/to/lock_file 锁文件的位置

调试,定位问题的配置:

1daemon

1 daemon off|on
    是否以守护方式启动nginx;

2 master_process

2 master_process on|off;
    是否以master/worker模型运行nginx;

3 error_log

3 error_log  /path/to/error_log level;
    错误日志文件以及级别;出于调式的需要,可以设定为debug;在编译的时候要加上--with-debug,才有效

套接字和主机相关的指令

1 server{}定义一个虚拟主机

server{
    listen PORT;
    server_name NAME;
    root /path/to/documentroot;
}
注意:
     1:基于port: 监听不同的端口
      2:基于hostname    server_name指令指向不同的主机名;

2 listen

  default_server:设置默认虚拟主机;用于基于IP地址,
        或使用了任意不能对应于任何一个server的name时,所返回的站点
    例如:listen 80 default_server;
    ssl:用于限制只能通过ssl连接提供服务
    spdy:spdy protocol(speedy)编译时必须加上spdy模块
    http2:http version 2;基于spdy开发的

3 server_name NAME[...];可以同时指定n个servername,名称可以用通配符*和正则表达式(~)

    匹配顺序:
    1 先做精确匹配:例如:www.example.com
    2 左侧通配符:例如:*.example.com
    3右侧通配符:例如:www.example.*
    4 正则表达式,例如:~^.*\.example\.com$
    4 default_server    

4 tcp_nodelay on|off; 对keepalive模式下的连接是否使用tcp_nodelay选项,默认不启用

5 tcp_nopush on|off; 是否启用tcp_nopush(freebse) 或tcp_cork(Linux);仅在sendfile为on时有用;默认off

6 sendfile on |off ;直接在内核空间中响应报文,要为on

路径相关的指令

7 root  设置web资源的路径映射;用于指明请求的url所对应的文档的目录路径

    server{
        ...
        root /data/www/vhost1;例如:http://www.example.com/images/logo.jpg-->/data/www/vhost1/images/logo.jpg
    }
    server{
        ...
        location /images/{
            root /data/imgs/;  //例如:http://www.example.com/images/logo.jpg-->/data/imgs/images/logo.jpg
        }
    }

8 location[=|~|~*|^~]url{...} 允许用户请求的uri来匹配定义的各location

location @name{...}

=:URI的精确匹配  
~:做正则表达式匹配,区分字符大小写
~*:做正则表达式匹配,不区分字符大小写
^~:URI的左半部分匹配,不区分字符大小写

匹配优先级顺序:精确匹配 ,^~ ,~或~* ,不带符号的URL;

9 alias 别名配置,定义路径别名

    只能用于location配置段
    location /images/{
         root /data/imgs/;
    }
    location /images/{
        alias /data/imgs/;
    }
     注意:
    root指令:路径为对应的location的“/”这个URL;
        /images/test.jpg  -->/data/imgs/images/test.jpg
    alias指令:路径为对应的location的“/url/”这个URL;
        /images/test.jpg -->/data/imgs/test.jpg

10 index 一般指明首页文件,还可以带变量,比如说不同语言的首页,index file ...

11 error_page code ... 自定义错误页面,根据http的状态码重定向错误页面

   error_page 404   /404.html;
    error_page 404  =200 /404.html;  注意root路径,其中200就是指定相应码

12 try_files

try_files file... url;
try_files file... =code;
尝试查找第1到第N-1个文件,第一个即为返回给请求者的资源:如果1到N-1文件都不存在,则跳转到最后一个uri;
这个uri由其他location定义,避免造成死循环
例如:注意下面的连个location
root /data/imgs/;
index index.html;
location /images/{
    try_files index.html  /images/test1.html  /images/test2.html  /images/test3.html  //最后一个必须存在
}
location=/images/test3.html{
    expires 10s;
}

用户请求相关的配置

13 keepalive_timeout;设定keepalive连接的超时时长,0表示禁止长连接;默认75秒

 

14 keepalive_requests number;在keepalived连接上所允许请求的最大资源连接数量;默认为100;

 

15 keepalive_disable指明禁止何种浏览器使用keepalive功能

 

16 send_timeout发送相应报文的超时时长,默认为60s; 精确的说时两次写操作之间的时长

 

17 client_body_buffer_size接收客户端请求报文body的缓冲区大小,默认为16K(32位系统为8k);超出此指定大小时,其将被移存到磁盘上,官方文档说是写在temporary file,临时文件上

 18   client_body_temp_path path [level1 [level2 [level3]]]; 设定用于存储客户端请求body的临时文件存放的地方以及数量

    client_body_temp_path  /var/tmp/client_body 2 2;

对客户端请求的限制

19 limit_except METHOD{...}  对指定范围之外的其他方法进行访问控制

limit_except GET{

  allow 172.16.0.0/16;

  deny all;

}

20 limit_rate speed;表示客户端每秒能传输的字节数,默认为0表示无限制

文件操作优化相关的配置

21  aio  on|off; 是否启用异步io模式

22 directio   size|off    

23 open_file_cache off  

open_file_cache max=N [inactive=time]

nginx可以缓存以下三种信息:

(1)文件描述符,文件大小和最近一次的修改时间

(2)打开的目录结构;

(3)没有找到的或者没有权限操作的文件的相关信息;

max=N 表示可缓存的最大条目上限,一旦达到上限,则会使用LRU算法从缓存中删除最近最少使用的缓存项

inactive=time:设置多长时间内没有被访问过的缓存项为非活动缓存项,因此直接删除;

24 open_file_cache_errors on|off;

是否缓存找不到其路径的文件,或者没有权限访问的文件相关信息

25 open_file_cache_valid time;

每隔多久检查一次缓存中的缓存项的有效性,默认为60s;

26  open_file_cache_min_uses number;缓存项在非活动期限内的最小应该被访问的次数;

 ngx_http_access_module模块的配置(基于ip的访问控制)

27 allow address |CIDR |unix: | all;  允许访问的地址

28 deny address |CIDR |unix: | all;   禁止访问的地址

ngx_http_auth_basic_module模块的设置(basic认证)

29 auth_basic string|off; 使用http basic认证协议对用户进行认证

30 auth_basic_user_file;实现用户认证的账号文件;

文件格式:
 name1:password1
 name2:password2:comment

密码格式:
 1 encrypted with the crypt() function;
 2 md5加密;

例如:

配置文件改为:

location /admin/{
    auth_basic  "Admin Area"; 
  auth_basic_user_file /etc]/nginx/.ngxpasswd # 指定验证文件的位置 }
yum install httpd -y #不用启动httpd服务
htpasswd -c -m /etc/nginx/.ngxhtpasswd tom #第一次要加 -c
htpasswd  -m /etc/nginx/.ngxhtpasswd jerry
nginx -s reload

 ngx_http_log_module: 模块的配置(访问日志)

31 log_format 定义日志格式及其名称,日志格式一般通过内置变量来定义

32 access_log path [format[buffer=size[flush=time]]];

access_log off;

访问日志文件路径,格式名称以及缓存大小和刷写时间间隔;建议定义缓冲以提升性能;

33 open_log_file_cache max=N [inactive=time][min_uses=N][valid=time];

ngx_http_stub_status_module模块设置: 只能用作server和location中

34 stub_status; 通过指定的uri输出 stub_status;

location /status/ {
   stub_status;  
}
内部含有敏感信息,一般不设置,要么加上访问控制
输出:
active connections: 291 当前活动的客户端连接数
server accepts handle requests: 已经接受的客户端连接总数量 已经处理过后客户端连接总数量 客户端总的请求数据
accepts handled requests
Reading 6 Writing 179 Waiting 106 正在读取的客户端请求的数量 正向其发送响应报文的连接数量 等待其发出请求的空闲连接数量;

 ngx_http_referer_module模块配置(基于请求报文中的Rerefer首部做访问控制)

35 valid_referers none|blocked|server_names|string...   

none:请求报文不存在referer首部

blocked:请求报文中存在referer首部,但其没有有效值,或者非以http://或https:// 开头

server_names: 其值为一个主机名;

arbitrary string;直接字符串,可以使用*通配符

regular expression:以~起始的正则表达式

内置变量:$invalid_referer(所有不能符合valid_referer指定定义的引用请求均为不合法引用

示例:防盗链

valid_referers none blocked server_names  *.example.com  example.*   www.example.org/galleries/   ~\.google\;

if($invalid_referer){

  return 403;

}

防盗链的例子

location ~* \.(gif|jpg|png|jpeg)$ {       #针对防盗链的文件类型
    expires     30d;
    valid_referers *.hugao8.com www.hugao8.com m.hugao8.com *.baidu.com *.google.com;   #白名单,允许访问的域名
    if ($invalid_referer) {
    rewrite ^/ http://www.hehe/404.jpg;  #让盗链者链接到其他地方
    
    }
    }

 

 

 ngx_http_proxy_module模块:

server{

  listen

  server_name

  location / {

    proxy_pass   http://localhost:8000/;

    proxy_set_header  Host   $host;  

    proxy_set_header X-Real_IP  $remote_addr;  #真正访问的客户端ip

  }

}

格式:

  location  /url {          #这个url的路径可以不存在

    proxy_pass http://back_server:port/newurl;

}

 

posted on 2018-09-13 09:26  dawn-liu  阅读(264)  评论(0编辑  收藏  举报