Nginx基础到进阶

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基础到进阶相关的知识,希望对你有一定的参考价值。

nginx相关配置

===============================================================================

概述:

    本篇我们将继续上一篇的话题,来介绍Nginx的相关配置



回顾:

技术分享


Nginx安装之rpm包

过程如下:

  1.在Nginx官方网点下载适合的nginx rpm包到本地,这里是我下载的rpm包:

 nginx-1.10.0-1.el7.ngx.x86_64.rpm

  2.在当前nginx包的所在目录中执行yum install 即可

[[email protected] ~]# ls
nginx-1.10.0  nginx-1.10.0-1.el7.ngx.x86_64.rpm  nginx-1.10.0.tar.gz
[[email protected] ~]# yum install ./nginx-1.10.0-1.el7.ngx.x86_64.rpm -y

  3.安装完成之后查看文件及程序所在位置

[[email protected] nginx]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx                      # 配置文件所在位置
/etc/nginx/conf.d         
/etc/nginx/conf.d/default.conf  # 配置文件片段
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf           # nginx主配置文件 
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service  
/usr/lib/systemd/system/nginx.service     # unit file 文件,使用nginx.service启动即可
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx                  # 主程序文件
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.10.0
/usr/share/doc/nginx-1.10.0/COPYRIGHT
/usr/share/nginx                 # 默认root的指向位置
/usr/share/nginx/html            
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html   # 默认提供的网页文件
/var/cache/nginx
/var/log/nginx

  我们用rpm包安装的nginx的主配置文件和编译安装的主配置文件中的定义使用写区别的,如下:

[[email protected] nginx]# pwd
/etc/nginx
[[email protected] nginx]# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf   scgi_params  uwsgi_params  win-utf
[[email protected] nginx]# mv nginx.conf{,.bak} # 同样先对主配置文件做备份

# 查看主配置文件,如下:
[[email protected] nginx]# cat  nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;     # 主配置段
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}
                                              # 如下为http配置段

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;  
}

# 由上可见这里只是定义了一些server的公共配置,没有定义server虚拟主机,而是定义在了/etc/nginx/conf.d/*.conf下

Nginx中http协议的相关配置

 2.定义路径相关的配置:

root path; 

  • 设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;

  • 用的位置:http, server, location, if in location;


location [ = | ~ | ~* | ^~ ] uri { ... }

  location @name { ... }

  • 在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;

  • 定义的路径映射

技术分享

  • 匹配的定义和优先级

技术分享


alias path;

  • 定义路径别名,文档映射的另一种机制;仅能用于location上下文;

  • 注意:

    location中使用root指令和alias指令的意义不同;

      (a)root,给定的路径对应于location中的/uri/左侧的/;

      (b)alias,给定的路径对应于location中的/uri/右侧的/;

index file ...;

  • 定义默认资源;

  • 定义的位置:http, server, location;

error_page code ... [=[response]] uri;

  • Defines the URI that will be shown for the specified errors. A uri value can contain variables.(Defines URI,它将显示指定的错误。一个uri的值可以包含变量。)

  • 可以自定义响应码

示例:

    由上面客可知,我们在http的配置段中要想编辑定义虚拟主机server,要在/etc/nginx/conf.d中定义,如下:

[[email protected] nginx]# cd conf.d/
[[email protected] conf.d]# ls
default.conf  
[[email protected] conf.d]# cp default.conf{,.bak} # 做备份
[[email protected] conf.d]# vim default.conf # 编辑配置文件如下:
  1 server {                    # 可见http的虚拟主机server都定义在此文件下
  2     listen       80;
  3     server_name  localhost;
  4 
  5     #charset koi8-r;
  6     #access_log  /var/log/nginx/log/host.access.log  main;
  7 
  8     location / {      # 这里没有把root定义在server中,而是把根 / 映射到 location中的/usr/share/nginx/html下
  9         root   /usr/share/nginx/html;
 10         index  index.html index.htm;
 11     }
 12 
 13     #error_page  404              /404.html;
 14 
 15     # redirect server error pages to the static page /50x.html
 16     #
 17     error_page   500 502 503 504  /50x.html;
 18     location = /50x.html {
 19         root   /usr/share/nginx/html; 
 20     }    # 表示做精确匹配
 21 
 22     # proxy the php scripts to Apache listening on 127.0.0.1:80
 23     #
 24     #location ~ \.php$ {
 25     #    proxy_pass   http://127.0.0.1;
 26     #}   # 表示做正则表达式模式匹配
 27 
 28     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 29     #
 30     #location ~ \.php$ {
 31     #    root           html;
 32     #    fastcgi_pass   127.0.0.1:9000;
 33     #    fastcgi_index  index.php;
 34     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 35     #    include        fastcgi_params;
 36     #}
 37 
 38     # deny access to .htaccess files, if Apache‘s document root
 39     # concurs with nginx‘s one
 40     #
 41     #location ~ /\.ht {
 42     #    deny  all;
 43     #}
 44 }

    1.由上面的配置文件中可知,用rpm包安装的nginx中,http配置段中虚拟主机server的根并没有直接定义在server的公共配置段中,而是定义在了location的上下文中,表示把根映射到/usr/share/nginx/html/下;

    所以如果我们要在浏览器中访问 http://10.1.252.161/admin 则对应的文件系统映射路径为 /usr/share/nginx/html/admin,试验如下:

# 在映射的根目录下创建目录admin,并提供默认页面
[[email protected] conf.d]# mkdir /usr/share/nginx/html/admin
[[email protected] conf.d]# echo "taotaoxiuxiu" > /usr/share/nginx/html/admin/index.html
[[email protected] conf.d]# cat /usr/share/nginx/html/admin/index.html
taotaoxiuxiu

   浏览器访问如下:

技术分享

  2.假如我们要单独对admin目录做访问控制,也可以重新定义admin的目录映射关系,例如,这里我们把admin目录映射到/vnhosts/www1/data下

技术分享

  保存退出后,检测语法重载nginx再次访问发现找不到该资源,如下:

技术分享

  如上,可见我们单独对admin做路径定义后,原来admin的路径就不对了,所以,我们要在新定义的路径下再次创建admin目录才可以,如下:

[[email protected] conf.d]# mkdir -pv /vnhosts/www1/data/admin
mkdir: created directory ‘/vnhosts/www1’
mkdir: created directory ‘/vnhosts/www1/data’
mkdir: created directory ‘/vnhosts/www1/data/admin’
[[email protected] conf.d]# cp /usr/share/nginx/html/admin/index.html /vnhosts/www1/data/admin

  再次刷新网页,可以正常访问,如下:

技术分享

  3.如果我们把admin在location中新定义的路径 root /vnhosts/www1/data 改为 alias /vnhosts/www1/data 会是怎样的效果呢,如下:

# 为了对比效果,我们在/vnhosts/www1/data目录下再创建一个默认页面,内容不同admin中的默认页面
[[email protected] data]# pwd 
/vnhosts/www1/data
[[email protected] data]# echo "/vnhost/www1/data" > index.html
[[email protected] data]# ls
admin  index.html

技术分享  

 再次访问如下:

技术分享

总结:

 在location上下文中

 1.定义 alia /vnhosts/www1/data/ 为目录admin的路径别名,映射的是/admin/最右侧的/;

      即: http://10.1.252.161/admin ---> /vnhosts/www1/data

 2.定义 root /vnhosts/www1/data/ 是/vnhosts/www1/data/最右侧根与/admin 最左侧根的映射,表示在data目录下还有一个目录为admin,而且必须要有,才能在浏览器中访问到admin。

      即: http://10.1.252.161/admin  ---> /vnhosts/www1/data/admin

  一定要注意映射关系,不要搞混了!!!


示例:

  自定义错误页面:

 首先编辑配置文件,自己定义一个404的错误页面,并定义文件映射的位置

技术分享

  创建此文件,并编辑错误页面信息

[[email protected] ~]# ls /usr/share/nginx/html/
50x.html  admin  index.html
[[email protected] ~]# mkdir /usr/share/nginx/html/error_pages
[[email protected] ~]# vim /usr/share/nginx/html/error_pages/404.html
  1 <h1>-----------------------------Not Found----------------------------------</h1>
  2 Power By taotao

  检查语法错误,重载后访问页面如下:

 技术分享

  如上,调试页面显示为404错误,我们也可以改变状态码,让客户端以位访问的就是正确的资源

技术分享

 保存,重载后再次刷新页面如下:

 技术分享


2.定义客户端请求的相关的配置:

keepalive_timeout timeout [header_timeout];

  • 设定保持连接的超时时长,0表示禁止长连接;默认为75s;

keepalive_requests number;

  • 在一次长连接上所允许请求的资源的最大数量,默认为100; 

keepalive_disable none | browser ...;

  • 对哪种浏览器禁用长连接;

send_timeout time;

  • 向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;

client_body_buffer_size size;

  • 用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;

client_body_temp_path path [level1 [level2 [level3]]];

  • 设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;

  • level为16进制的数字;

    举例:client_body_temp_path path  /var/tmp/client_body  1 2 2 表示:有16个一级子目录,一级子目录下有256(16*16)个二级子目录;每个二级子目录下又有256个三级子目录

        












































以上是关于Nginx基础到进阶的主要内容,如果未能解决你的问题,请参考以下文章

NGINX从入门到精通进阶系列培训

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

Atom编辑器入门到精通 Atom使用进阶

Nginx进阶之路——基础应用实战

Atom编辑器入门到精通 Atom使用进阶