Nginx 进阶知识学习(三)

开始nginx配置文件实践配置:

【虚拟主机知识说明】
    ①. 理解虚拟主机知识概念;即一个server就是一个虚拟主机  
    [root@web02 ~]# cat /application/nginx/conf/nginx.conf
        worker_processes  1;
        events {
            worker_connections  1024;
        }
        http {
            include       mime.types;
            default_type  application/octet-stream;
            sendfile        on;
            keepalive_timeout  65;
            server {
                listen       80;
                server_name  www.guoxiangfu.com;         <- 修改虚拟主机域名名称
                location / {
                    root   html/www;                    <- 修改虚拟主机站点目录
                    index  index.html index.htm;
                }
            }
        }
curl 10.0.0.8  == curl 10.0.0.8/index.html   

      [root@web02 ~]# mkdir /application/nginx/html/www/ -p     <- 创建虚拟主机的站点目录
      [root@web02 ~]# /application/nginx/sbin/nginx -t          <- 检查配置文件语法信息是否正确
      [root@web02 ~]# /application/nginx/sbin/nginx -s reload	<- 检查语法配置正确后,进行优雅重启nginx服务
      [root@web02 ~]# cat /etc/hosts                            <- 编辑域名解析信息,便于linux服务器通过域名访问主机站点目录下资源信息
          127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
          ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
          10.0.0.7     blog.guoxiangfu.com 
        [root@web02 ~]# curl www.guoxiangfu.com                    <- 利用curl命令本地检测nginx配置是否成功
                                                                     进行curl时,报403错误,因为没有首页文件信息
	[root@web02 ~]# echo 'web01 www' > /application/nginx/html/www/index.html
		                                                       <- 在虚拟主机指定的站点目录中创建首页文件			  
	[root@web02 ~]# curl www.guoxiangfu.com                    <- 利用curl命令本地检测nginx配置是否成功;已经存在首页文件,测试成功		

理解虚拟主机知识概念;进行搭建多个网站(搭建多个虚拟主机,一个网站就是一个虚拟主机(server))        

扩展知识:nginx配置文件编辑技巧
可以利用%在server一对花括号之间进行切换
[root@web02 ~]# cat /application/nginx/conf/nginx.conf
    worker_processes  1;
    events {
           worker_connections  1024;
    }
    http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
             listen       80;
             server_name  www.guoxiangfu.com;         <- 修改虚拟主机域名名称
             location / {
                 root   html/www;                    <- 修改虚拟主机站点目录
                 index  index.html index.htm;
           }
    }
server {
             listen       80;
             server_name blog.guoxiangfu.com;         <- 修改虚拟主机域名名称
             location / {
                 root   html/bbs;                    <- 修改虚拟主机站点目录
                 index  index.html index.htm;
             }
    }
   server {
             listen       80;
             server_name  blog.guoxiangfu.com;        <- 修改虚拟主机域名名称
             location / {
                 root   html/blog;                   <- 修改虚拟主机站点目录
                 index  index.html index.htm;
             }
   }
   }
 说明:利用vim复制命令,复制创建多个server主机标签;即x,ycopyz---10,17copy17
 			  
   [root@web02 ~]# mkdir /application/nginx/html/{www,bbs,blog} -p            <- 创建不同网站域名站点目录
   [root@web02 ~]# for name in www bbs blog ;do echo web01 ${name}.guoxiangfu.com >/application/nginx/html/$name/index.html ;done
   [root@web02 ~]# for name in www bbs blog ;do cat /application/nginx/html/$name/index.html ;done 
   说明:创建不同站点目录,并利用for循环创建不同站点目录下的首页文件,以及利用for循环进行验证不同站点目录下首页文件内容是否不同
			  
   [root@web02 ~]# /application/nginx/sbin/nginx -t          <- 检查配置文件语法信息是否正确
   [root@web02 ~]# /application/nginx/sbin/nginx -s reload	 <- 检查语法配置正确后,进行优雅重启nginx服务			  
   说明:编辑完多个虚拟主机信息,进行重启nginx服务(检查语法,平滑重启)
       
   [root@web02 ~]# curl www.guoxiangfu.com                    <- 利用curl命令本地检测nginx配置是否成功;
   [root@web02 ~]# curl blog.guoxiangfu.com
   [root@web02 ~]# curl blog.guoxiangfu.com
   说明:利用curl命令进行测试三个虚拟主机是否已经可以正确访问;需要注意hosts文件中已经对三个域名进行了统一解析
         以上配置虚拟主机方式为---基于域名的方式配置虚拟主机

nginx配置文件实践配置说明---基于端口配置虚拟主机

开始nginx配置文件实践配置:

 【虚拟主机配置说明---基于端口配置】
      01. 理解基于端口虚拟主机概念;主要用于内部网络人员访问虚拟主机使用,不想提供直接对外访问的虚拟主机 
          [root@www conf]# cat nginx.conf
              worker_processes  1;
              events {
                  worker_connections  1024;
              }
              http {
                  include       mime.types;
                  default_type  application/octet-stream;
                  sendfile        on;
                  keepalive_timeout  65;
                  server {
                      listen       80;
                      server_name  www.guoxiangfu.com;
                      location / {
                          root   html/www;
                          index  index.html index.htm;
                      }
                  }
                  server {
                      listen       81;#←由基于域名的80改为基于端口的81
                      server_name blog.guoxiangfu.com;
                      location / {
                          root   html/bbs;
                          index  index.html index.htm;
                      }
                  }
                  server {
                      listen       80;
                      server_name  blog.guoxiangfu.com;
                      location / {
                          root   html/blog;
                          index  index.html index.htm;
                      }
                  }
              }
  说明:通过修改不同server标签中的监听端口信息,实现基于端口的方式访问不同虚拟主机;精简化配置:只改动bbs虚拟主机端口,其它主机端口不变
  		  
              [root@web02 ~]# /application/nginx/sbin/nginx -t          <- 检查配置文件语法信息是否正确
			  [root@web02 ~]# /application/nginx/sbin/nginx -s reload	<- 检查语法配置正确后,进行优雅重启nginx服务
			  [root@web02 ~]# ss -lntup|grep nginx                      <- 端口信息相应增加,不再只是一个80端口
              说明:编辑完多个虚拟主机信息,进行重启nginx服务(检查语法,平滑重启)
	   
              [root@web02 ~]# curl www.guoxiangfu.com                    <- 利用curl命令本地检测nginx配置是否成功;
			  [root@web02 ~]# curlblog.guoxiangfu.com              
	          说明:显示结果均为www.guoxiangfu.com域名站点目录下的首页文件内容
			  
			  [root@web02 ~]# curl -vblog.guoxiangfu.com                 <- 利用curl命令-v参数获取访问网站流程
			  a. 访问网站时首先需要根据域名解析获取到网站的ip地址,找寻网站的ip地址对应的服务器
			  b. 访问网站时其次需要根据请求建立连接的目标端口信息,找寻网站的相应服务端口是否存在
			  c. 访问网站时再次需要根据请求域名信息获悉相应的站点,找寻网站的相应站点目录下的资源信息
			  d. 访问网站时最后如果ip地址加端口信息都已找到,但没有找到对应的域名信息,会按照默认原则使用第一个虚拟主机作为
                 默认访问的虚拟站点目录
			  [root@web02 ~]# curl  http://bbs.guoxiangfu.com:81        <- 利用curl命令本地检测nginx配置是否成功;
			  [root@web02 ~]# curl  http://www.guoxiangfu.com:81        <- 利用curl命令本地检测nginx配置是否成功;
              说明:以上信息为在linux系统中进行验证检测基于端口的虚拟主机配置;建议可以利用windos环境再进行相应测试;并且利用抓包工具进行抓包查看
              以上配置虚拟主机方式为---基于端口的方式配置虚拟主机(抓包查看基于端口访问过程)

nginx配置文件实践配置说明---基于ip配置虚拟主机

【虚拟主机配置说明---基于ip配置】
[root@www conf]# cat nginx.conf
        worker_processes  1;
        events {
                worker_connections  1024;
        }
        http {
              include       mime.types;
              default_type  application/octet-stream;
              sendfile        on;
              keepalive_timeout  65;
              server {
                      listen       10.0.0.8:80;
                      server_name  www.guoxiangfu.com;<- 此处也可以改成对应IP 10.0.0.8
                      location / {
                          root   html/www;
                          index  index.html index.htm;
              }
        }  
        #     server {
        #         listen       10.0.0.9:81;
        #         server_name blog.guoxiangfu.com;<- 此处也可以改成对应IP 10.0.0.9
        #         location / {
        #             root   html/bbs;
        #             index  index.html index.htm;
        #         }
        #     }
        #     server {
        #         listen       10.0.0.10:82;
        #         server_name  blog.guoxiangfu.com;<- 此处也可以改成对应IP 10.0.0.10
        #         location / {
        #             root   html/blog;
        #             index  index.html index.htm;
        #         }
        #     }
        # }
        说明:通过修改不同server标签中的监听ip信息,实现基于ip的方式访问不同虚拟主机;精简化配置:只配置一个虚拟主机,其它注释
=============================================================================
扩展知识说明:vim编辑器使用
ctrl+v          进入可视化模块模式,实现批量编辑操作
r               直接替换字符信息
x               删除当前光标所在位置字符信息
 [root@web02 ~]# /application/nginx/sbin/nginx -t          <- 检查配置文件语法信息是否正确
    [root@web02 ~]# /application/nginx/sbin/nginx -s reload<- 检查语法配置正确后,进行优雅重启nginx服务
    [root@web02 ~]# ss -lntup|grep nginx                      <- 监听地址信息发生变化
    [root@web02 ~]# /application/nginx/sbin/nginx -s stop    <- 检查语法配置正确后,进行优雅关闭nginx服务
    [root@web02 ~]# /application/nginx/sbin/nginx         <- 进行启动nginx服务
    [root@web02 ~]# ss -lntup|grep nginx                      <- 监听地址信息发生变化
        说明:编辑完多个虚拟主机信息,进行重启nginx服务(检查语法,平滑重启);和IP地址相关的配置变化,nginx服务需要重新启动生效,不能采用平滑重启方式
        提示:更多nginx命令行参数说明:http://nginx.org/en/docs/switches.html
[root@web02 ~]# curl 10.0.0.8                    <- 利用curl命令本地检测nginx配置是否成功;
[root@web02 ~]# curl 172.16.1.8              
    说明:显示结果均为相应站点目录资源信息;而访问非监听地址,没有返回信息
        以上配置虚拟主机方式为---基于IP的方式配置虚拟主机

Nginx配置虚拟主机的步骤(简介)

 Nginx配置虚拟主机的步骤如下(适合各类虚拟主机类型):
    1)增加一个完整的server标签段到结尾处。注意,要放在http的结束大括号前,也就是将server标签段放入http标签。
    2)更改server_name及对应网页的root根目录,如果需要其他参数,可以增加或修改。
    3)创建server_name域名对应网页的根目录,并且建立测试文件,如果没有index首页,访问会出现403错误。
如果是apache软件,没有首页文件,默认会把站点目录下面的信息显示出来
nginx出403错误解决方式:http://oldboy.blog.51cto.com/2561410/1633952
autoindex on;  #<==当找不到首页文件时,会展示目录结构,这个功能一般不要用除非有需求。
PS:显示的目录结构中,有些信息点击就是下载,有的点击就是显示,因为扩展名称不一样
根本在于nginx软件是否能够进行解析
nginx是否解析:
            1. html jpg 认识 显示出内容
            2. 不认识 不解析 便直接下载
    4)检查Nginx配置文件语法,平滑重启Nginx服务,快速检查启动结果。
    5)在客户端对server_name处配置的域名做host解析或DNS配置,并检查(ping域名看返回的IP是否正确)。
    6)在Win32浏览器中输入地址访问,或者在Linux客户端做hosts解析,用wget或curl接地址访问。
        Nginx虚拟主机的官方帮助网址为:http://Nginx.org/en/docs/http/request_processing.html 。
    ====================================================================
扩展知识:浏览器隐身模式设置
谷歌隐身模式:不会留下缓存
· 缓存信息抓包后显示的状态码为304
· nginx里面看缓存304的访问记录,访问nginx日志信息,访问尺寸为0
    tail -f /application/nginx/logs/access_www.log

 nginx排错过程说明

下面介绍客户端排查的思路:(如果curl www.baidu.com结果不是预期的)
    第一步,在客户端上ping服务器端IP,命令如下。
            ping 10.0.0.8    <- 排除物理线路问题影响
    第二步,在客户端上telnet服务器端IP、端口,命令如下:
            telnet 10.0.0.8 80    <- 排除防火墙等得影响
    第三步,在服务端使用wget命令检测,如下:
            wget 10.0.0.8(curl -I 10.0.0.8)<- 模拟用户访问,排除http服务自身问题,根据输出在排错    
            curl -v/wget -debug
提示信息:以上三步是客户端访问网站异常排查的重要三部曲。
    nginx软件如何进行处理请求:参见官方网站资料:http://Nginx.org/en/docs/http/request_processing.html

nginx常用功能说明

①. 多个主机不同配置文件进行管理(规范化配置文件)
    实现一个网站对应一个配置文件,而不是将多个网站都放在一个nginx.conf配置文件中
[root@web02 ~]# cd /application/nginx/conf/
        [root@web02 conf]# mkdir extra
将不同站点server标签信息追加到www.conf bbs.conf blog.conf文件中去
include extra/*.conf
说明:按照以上参数规范nginx配置文件配置会出现问题,并不符合要求
      curl www.guoxiangfu.com 没有出现问题,正常显示信息
  curl 10.0.0.7          就会出现问题,显示bbs.guoxiangfu.com域名信息
  因为ls extra/*.conf -l信息查看到的第一个配置文件就是bbs.conf
建议nginx配置文件规范配置内容信息如下格式:
include extra/www.conf;
        include extra/bbs.conf;
        include extra/blog.conf;
    ②. 域名别名功能说明(sudo里面的别名-用户别名 命令别名)
        短域名变为长域名---配置域名别名功能       
        server_name  www.guoxiangfu.com www1.guoxiangfu.com www2.guoxiangfu.com;
主要功能:便于定位识别相应的nginx服务器集群节点
    
    ③. 状态模块功能说明
    nginx -V  ---查看编译参数中,是否加载了状态模块信息(--with-http_stub_status_module )
配置nginx服务的状态模块信息
cat >>/application/nginx/conf/extra/status.conf<<EOF  
        ##status
        server{
            listen  80;
            server_name  status.guoxiangfu.com;
            location / {
              stub_status on;
              access_log   off;
            }
          }
        EOF
        sed -i '13 i include extra/status.conf;'  nginx.conf
==============================================================
扩展知识:虚拟机端口映射配置
    ==============================================================
    可以对状态模块访问设置限制,只允许部分网段主机可以访问状态模块页面信息
location /nginx_status {
        stub_status on;
        access_log off;
        allow 10.0.0.0/24;#<==设置允许和禁止的IP段访问
        deny all;#<==设置允许和禁止的IP段访问
        }


nginx日志功能说明

①. 错误日志信息说明
    error_log的默认值为:
        #default:error_log logs/error.log error;
        可以放置的标签段为:
        #context:main,http,server,location
        参考资料:http://nginx.org/en/docs/ngx_core_module.html#error_log 。
说明:nginx官方文档查询信息如何使用,如何根据配置信息获取所在模块目录
    ②. 访问日志信息说明
        Nginx日志格式中默认的参数配置如下:
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        Nginx记录日志的默认参数配置如下:
        access_log  logs/access.log  main;
        说明:以下信息类似于inotify命令的使用过程
a. 日志格式信息说明
b. 日志轮询切割说明
   /bin/mv /application/nginx/logs/access.log /application/nginx/logs/access_$(date +%F).log
   /application/nginx/sbin/nginx -s reload
   编写脚本,利用定时任务进行执行,实现日志切割的目的
扩展自学:logrotate工具使用(系统自带日志切割工具)

    

nginx的location作用说明

  location表示位置的概念,类似于if,即满足什么条件,就做什么
官方location配置信息说明:
    location = / {
        [ configuration A ]
    }
    location / {
        [ configuration B ]
    }
    location /documents/ {
        [ configuration C ]
    }
    location ^~ /images/ {
        [ configuration D ]
    }
    location ~* \.(gif|jpg|jpeg)$ {
        [ configuration E ]
    }


测试说明:
server {
        listen       80; 
        server_name  www.guoxiangfu.com guoxiangfu.com;
        root   html/www;
        location / {
           return 401; 
        }
        location = / {
            return 402;
        }
        location /documents/ {
            return 403;
        }
        location ^~ /images/ {
            return 404;
        }
        location ~* \.(gif|jpg|jpeg)$ {
    return 500;
        }
        access_log logs/access_www.log main
    }
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.guoxiangfu.com
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.guoxiangfu.com/index.html


nginx的rewirte作用说明

nginx 的rwite重写模块说明:
    http://www.oldboyedu.com/day1&oldboy
http://www.oldboyedu.com/day1-oldboy
rewrite语法格式:rewrite regex replacement [flag] == s#regex#replacement#g
rewrite应用标签:server、location、if
练习一:guoxiangfu.com  >>  www.guoxiangfu.com
        server {
                listen       80;
                server_name  www.guoxiangfu.com;
                rewrite ^/(.*) http://www.guoxiangfu.com/$1 permanent;
                location / {
                    root   html/www;
                    index  index.html index.htm;
                }
                access_log  logs/access_www.log  main;
            }
说明:以上配置会存在问题
[root@web02 conf]# curl guoxiangfu.com
            <html>
            <head><title>301 Moved Permanently</title></head>
            <body bgcolor="white">
            <center><h1>301 Moved Permanently</h1></center>
            <hr><center>nginx/1.10.2</center>
            </body>
            </html>
            [root@web02 conf]# curl -L guoxiangfu.com
            curl: (47) Maximum (50) redirects followed

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

    命令知识扩充:curl命令参数说明
curl -Lv   
            -L表示:-L/--location      Follow Location: hints (H);表示追踪访问的过程,跟踪Location信息;示意信息(H)
            -v表示:                   显示追踪的信息
======================================================================
        a. 避免无线跳转的第一种方法:
            if ($host ~* "^guoxiangfu.com$") {
            rewrite ^/(.*) http://www.guoxiangfu.com/$1 permanent;
            }
            b. 避免无线跳转的第二种方法:
            server {
                    server_name guoxiangfu.com;
                    rewrite ^/(.*) http://www.guoxiangfu.com/$1 permanent;
            }
            标记参数说明
            301和302状态区别:
            Http状态码301和302概念简单区别及企业应用案例
            http://oldboy.blog.51cto.com/2561410/1774260 
            工作中应用场景说明
   
nginx 的rwite重写企业应用场景:
    · 可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
 · 为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
· 网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com。
· 根据特殊变量、目录、客户端的信息进行URL跳转等。
    说明:开源软件类似wordpress的,官方都会对伪静态配置进行说明

nginx 的访问认证

   

①. 修改nginx的相关配置文件
    vim extra/www.conf
location / {
            root   html/www;
            index  index.html index.htm;
            auth_basic              "oldboy training";
            auth_basic_user_file    /application/nginx/conf/htpasswd;
     }
    ②. 创建密码认证文件并进行授权
    yum install httpd-tools -y
    htpasswd -bc /application/nginx/conf/htpasswd oldboy 123456
-c  Create a new file.
    创建一个新的密码文件
-b  Use the password from the command line rather than prompting for it.
    采用免交互的方式输入用户的密码信息
    chmod 400 /application/nginx/conf/htpasswd     
    chown www /application/nginx/conf/htpasswd   
    # ll /application/nginx/conf/htpasswd
    -r-------- 1 nginx root 21 2017-05-14 19:45 /application/nginx/conf/htpasswd
    ③. 配置结果测试
windows浏览器进行测试
linux系统下进行测试
curl -u 
    -u/--user <user[:password]> Set server user and password
    [root@web01 conf]# curl -u lidao888:123456 www.guoxiangfu.com
    web01 www
打赏 支付宝打赏 微信打赏

最后编辑于:2017/12/24作者: 富华运维空间

相关推荐

发表评论

动态鼠标蜘蛛网特效