nginx服务器配置说明

目录

一、网站页面访问流程

二、HTTP协议请求和响应

    1、HTTP请求报文

    2、HTTP响应报文

三、HTTP协议资源信息

四、评测网站好坏的指标:

五、常用的网站服务软件

六、nginx软件服务特点

七、nginx安装方式

    01.yum安装

        a 使用官方ym源进行安装  

    02.编译安装软件

        (1)解决依赖

        (2)下载好源码包

        (3)解压软件、进入目录

(4)编译安装

八、nginx的目录结构

九、nginx服务的配置文件

    1、cat /etc/nginx/nginx.conf    主配置文件 

        第一个部分:配置文件主区域配置

        第二个部分:配置文件事件区域

        第三个部分:配置http时间区域

    2、cat  /etc/nginx/conf.d/default.conf   ---扩展配置文件

    第四个部分:server区域信息(配置一个网站,即一个虚拟主机)   

十、利用nginx搭建一个网站

   1、编写虚拟主机配置文件

    2、编写网站代码

    3、平稳重启nginx

   4、编写DNS配置信息(域名解析)

    常见错误:

十一、利用nginx搭建多个网站

十二、虚拟主机访问方式

    1、基于域名

    2、基于地址

    3、基于端口

十三、安全访问

    1、用户访问地址进行控制

    2、根据用户进行认证

十四、利用nginx搭建文件共享服务器

    第一步:编写配置文件

    第二步:将mime.type媒体资源类型文件里的类型注释掉

十五、中文显示出现乱码

十六、搭建配置文件别名功能

    第一步:编写配置文件

十七、nginx日志 /var/log/nginx/

1、访问日志 access.log  ---ngx_http_log_module   定义日志格式内容

    2、错误日志 error.log  ---Core functionality

十八、location作用说明

十九、利用nginx实现跳转功能

    1、利用rewrite模块实现跳转功能:http_rewrite_module

    2、利用return       


一、网站页面访问流程


    00.客户端      浏览器输入网址信息点击回车ww.oldboyedu.com)
    01.客户端      完成域名的解析过程(DNs)
    02.客户端      直接访问相应网站服务器     建立TcP三次握手过程
    03.客户端      访问网站服务器             发送HTTP请求报文多次
    04.服务端      响应容户端请求             回复HTTP响应报文多次
    05.客户端      浏览器看到网站页面
    05.客户端      结束访问网站过程           完成TCP四次挥手过程

 

二、HTTP协议请求和响应


    1、HTTP请求报文


        1)请求行     ---请求什么信息、协议版本
            请求方法:  Get      --读/看---获取/拿过来
                        Post     --写/提交
            请求信息:  index.html(首页文件)
            请求协议:  HTTP:1.1
                HTTP:1.0    TCP短连接  只要请求就建立三次和四次握手
                HTTP:1.1    TCP长连接    在超时时间内,请求时不再建立三次和四次握手过程
                HTTP:2.0    TCP长连接(优化) 提高用户并发(同时)访问效率

        2)请求头     ---客户端有关信息介绍说明
            请求主机信息 HOST:www.srjxx.com、blog.srjxx.com
            请求设备信息 HTTP-User-Agent: firefox、IE、chrome

        3)空行       ---隔离上下文、说明请求头部结束

        4)请求主体   ---只有POST方法可以提交请求内容

    2、HTTP响应报文


        1)起始行    ---响应的状态码/状态信息等
            状态码信息      访问请求是否成功
            200、301(永久跳转)/302(临时跳转)、403、404、500、502

        2)响应头部  ---响应的具体信息
            响应的服务server:nginx
            响应时间、响应类型、响应字符集。。。

        3)空行     ---隔离上下文、说明响应头部结束

        4)响应主体     ---响应返回的内容

nginx服务器配置说明_第1张图片

 

三、HTTP协议资源信息


    URL:统一资源定位符
    URI:统一资源标识符

    learning.xidian.edu.cn   /   portal/sdfaf/index.html
            URL                         URI


    网站页面静态资源:要什么给什么,不用做解析、速度快
        index.html、aaa.jpg

    网站页面动态资源:要什么需要查询数据库解析后发给客户端,可交互
        aaa.asp、aaa.php
        出现?、&等符号,不便搜索引擎收录

    伪静态页面(实际为动态)---方便搜索引擎收录、也可实现网页、数据库交互

 

四、评测网站好坏的指标:


    IP:根据用户IP数目进行统计         300~400百万/周

    PV:页面访问量                     700~800百万/周  

    UV:记录独立访客数量
        cookie:标识用户身份信息,保存在客户端
        session:记录用户的一些会话操作,如登录操作

    网站并发:(压测技术)

        A种理解:网站服务器每秒能够接收的最大用户请求数      √
        B种理解:网站服务器每秒能够响应的最大用户请求数      √√
        c种理解:网站服务器在单位时间内能够处理的最大连接数  √√√

    参考网址:http://alexa.chinaz.com/alexa_more.apx

 

五、常用的网站服务软件


    处理静态资源的服务:
    apache软件:http://apache.org
    nginx软件:http://nginx.org

    处理动态资源的服务:
    PHP: php.net        终端浏览器进行访问
    Tomcat(java):       利用移动端查看网页   安卓-java
    Python:             开发难度低

六、nginx软件服务特点


    高并发(特别是静态资源)、占用资源少。
    可作为网站服务功能(apache)、负载均衡(LVS)、缓存(Squid)软件,多系统可用、实现网络通讯时,进行的是异步网络IO模型epoll模型(apache---select模型)

    epoll模型:
    找人:查看人员登记信息
    小朋友上厕所:上厕所的都站在某个位置

    select模型:
    找人:一个一个屋子去问   ---线性轮询
    小朋友上厕所:一个一个去询问

nginx服务器配置说明_第2张图片

七、nginx安装方式


    01.yum安装


        a 使用官方ym源进行安装  

             安装的是最新版本   软件目录结构比较标准(推荐)

            1、更新官方源


            vim /etc/yum.repos.d/nginx.repo 
            [nginx-stable]
            name=nginx stable repo
            baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
            gpgcheck=1
            enabled=1
            gpgkey=https://nginx.org/keys/nginx_signing.key
            module_hotfixes=true

            2、yum安装nginx


                yum install -y nginx
                echo $?

            3、启动nginx,检查是否安装正确


                systemctl start nginx
                systemctl enable nginx


            4、测试是否启动


              浏览器输入ip地址,看到nginx界面

        b 使用非官方ym源进行安装  安装的不是最新版   目录结构会发生变化

    02.编译安装软件


        (1)解决依赖


            下载安装软件包openssl-devel、pcre-devel


        (2)下载好源码包


            mkdir /server/tools
            wget http://nginx.org/download/nginx-1.18.0.tar.gz
       

        (3)解压软件、进入目录


            tar -xzvf nginx-1.18.0.tar.gz


(4)编译安装


            a 进行配置
                ./configure   --prefix=...   --user=...   --group=...
                --prefix=PATH       指定程序安装路径
                --user              设置虚拟用户管理worker进程
                --group             设置虚拟组管理worker进程
                --with-http_..._module   开启...模块功能
                --without-http_..._module   关闭...模块功能
            b 进行软件编译
                make 编译 
                高级语言变为二进制
            c 编译安装
                make install

八、nginx的目录结构


        实现nginx日志文件定时切割  

        日志切割方法一:脚本
        #!/bin/bash
        mv /var/log/nginx/access.log  /var/log/nginx/access_$(date +%F).log
        systemctl restart nginx
        日志切割方法二:利用专用文件切割程序--logrotate
        vim /etc/logrotate.conf

        # see "man logrotate" for details
        # rotate log files weekly       ---默认切割日志的周期
        weekly

        # keep 4 weeks worth of backlogs   ---只保留几个切割后的文件
        rotate 4

        # create new (empty) log files after rotating old ones
        create                   ---创造出一个相同的源文件

        # use date as a suffix of the rotated file
        dateext                       ---定义角标(扩展名称信息)

        # uncomment this if you want your log files compressed
        #compress                    ---是否对切割后的文件压缩处理

        # RPM packages drop log rotation information into this directory
        include /etc/logrotate.d         ---加载/etc/logrotate.d的目录配置

        # no packages own wtmp and btmp -- we'll rotate them here
        /var/log/wtmp {                 ----单独对某个文件进行切割
            monthly
            create 0664 root utmp
            minsize 1M                  ---最小尺寸1M,小于1M不切割
            rotate 1
        }

        /var/log/btmp {
            missingok
            monthly
            create 0600 root utmp
            rotate 1
        }

        # system-specific logs may be also be configured here.

        总结:
        01./etc/nginx        配置文件
        02./var/log/nginx    日志文件
        03./usr/bin/nginx    命令文件
        04./usr/share/nginx/html  站点目录

九、nginx服务的配置文件


    /etc/nginx/nginx.conf        ---主配置文件
    /etc/nginx/conf.d/default.conf   ---扩展配置文件

    1、cat /etc/nginx/nginx.conf    主配置文件 

        第一个部分:配置文件主区域配置


        user  www;          ---定义worker进程管理的用户
            注:nginx进程
            master process:主进程---管理服务是否正常运行
            worker process:工作进程---处理用户访问请求

        worker_processes  1;  ---有几个worker进程(处理并发请求) ==CPU核数 / 核数两倍 ---lscpu(CPU(s)= 1)
        error_log  /var/log/nginx/error.log warn;  ---定义错误日志
        pid        /var/run/nginx.pid;   ---定义pid文件(有这个文件,代表服务已启动)

 

        第二个部分:配置文件事件区域


        events {
            worker_connections  1024;  ---一个worker进程同时接受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;  ---加载配置文件
        }

 

    2、cat  /etc/nginx/conf.d/default.conf   ---扩展配置文件

 

    第四个部分:server区域信息(配置一个网站,即一个虚拟主机)
   

server {
        listen       80;            ---监听的端口
        server_name  localhost;        ---指定网站域名
        location / {                  ---进行匹配    
            root   /usr/share/nginx/html;   ---定义站点目录位置
            index  index.html index.htm;    ---定义首页文件
        }
        error_page   500 502 503 504  /50x.html; ---优雅显示错误页面信息
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

十、利用nginx搭建一个网站


   1、编写虚拟主机配置文件


        cd /etc/nginx/conf.d
        vim www.conf

        server{
            listen    80;
            server_name  srjxx.com;
            location / {
                root   /usr/share/nginx/html
                index  index.html
            }

        }


    2、编写网站代码

 

    3、平稳重启nginx


        1、systemc reload nginx
        2、nginx -s reload

        nginx命令参数:
            -t 检查语法
            -T 即测试又将所有配置信息打印
            -s stop/reload  将服务重启或停止

   4、编写DNS配置信息(域名解析)


    常见错误:


    1、网站文件配置不正确
        404 找不到
        解决方法一:修改nginx配置文件---location
        解决方法一:在站点目录中创建相应目录或文件数据
        403 禁止访问
        解决方法一:不要禁止
        解决方法一:没有首页文件
    2、DNS配置不正确
    3、nginx配置文件修改需要重启
       站点目录中代码文件信息调整,不需要重启

 

十一、利用nginx搭建多个网站


    1、创建多个虚拟主机配置文件

    2、创造站点目录和首页文件

    3、重启并测试

 

十二、虚拟主机访问方式


    1、基于域名


    2、基于地址


        只用指定的地址访问,必须systemctl重启,不能平滑,否则不起作用
        listen   10.0.0.7:80;

        当www.srjxx.com设置为8080,但客户端访问www.srjxx.com:80时,优先满足端口,服务端找到端口为80的内容,再发送过去

    3、基于端口

 

十三、安全访问


    1、用户访问地址进行控制


        内网用户可以看    
        外网用户不能看

        查看文档模块ngx_http_access_module
        location / {
            deny  192.168.1.1;
            allow 192.168.1.0/24;
            allow 10.1.1.0/16;
            allow 2001:0db8::/32;
            deny  all;
        }
             
        指令用法:
        Syntax: allow address | CIDR | unix: | all;
        Default: —
        Context:http, server, location, limit_except

        eg:
        location /av {
            root /home/cq/test;
            index index.html
            allow 10.0.0.0/24; 
        }

        补充:location外面为全局信息,里面为局部信息


    2、根据用户进行认证


        nginx认证模块: ngx_http_auth_nasic_module

        指令用法:
        location / {
            auth_basic          "说明";    ---开启认证功能
            auth_basic_user_file ./passwd/htpasswd;   ---加载用户密码文件
        }

        (1)编写配置文件
            server {
                listen       80;
                server_name  localhost;
                location / {
                    root   /usr/share/nginx/html;
                    index  index.html index.htm;
                    auth_basic    "说明";
                    auth_basic_user_file  ./passwd/htpasswd;
                }
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                    root   /usr/share/nginx/html;
                }
            }

        (2)创建密码文件(文件中密码文件信息必须是密文的)


            命令:htpasswd  创建有密文信息的文件
            安装:yum install -y httpd-tools

            命令参数说明:
             -c  Create a new file.
             创建一个密码文件
             -n  Don't update file; display results on stdout.
             不会更新文件;显示文件内容
             -b  Use the password from the command line rather than prompting for it.
             免交互方式生成密码文件
             -i  Read password from stdin without verification (for script usage).
             读取密码信息,采取标志输入,不做检查
             -m  Force MD5 encryption of the password (default).
             用md5加密算法
             -2  Force SHA-256 crypt() hash of the password (secure).
             用SHA-256加密算法
             -B  Force bcrypt aencryption of the password (very secure).
             用bcrypt加密算法 
             -p  Do not encrypt the password (plaintext, insecure).
             不进行加密
             -D  Delete the specified user.
             删除指定用户

            修改密码文件权限:
            chmod 600 ./htpasswd
            chown www ./htpasswd  nginx的working进程为www用户,所以属主改为www才能正确读取密码信息,否则报500错误

            eg: curl 10.0.0.7 -u cq:chengqi(-u 指定用户名和密码)

            500 Internal Server Error
            01:内部程序不正确
            02:无法正确读取密码文件

十四、利用nginx搭建文件共享服务器


    第一步:编写配置文件


        应用模块:ngx_http_autoindex_module

        location / {
            autoindex on;
        }

        但是默认会查询首页文件,即是将配置文件里的index注释。可以index写一个找不到的文件即可

 

    第二步:将mime.type媒体资源类型文件里的类型注释掉

 

        #text/plain      txt;
        此时识别不了txt文件,会将其下载

 

十五、中文显示出现乱码


        charset设置字符编码
        location / {
            charset utf-8;
        }


十六、搭建配置文件别名功能


    第一步:编写配置文件


    server_name  localhost srjxx.com;


    第二步:建立host映射


    10.0.0.7  srjxx.com

    作用:
    1、方便测试
    2、定位要访问的网站服务器(负载均衡定位服务器)
    3、利用nginx状态模块对网站进行监控


        状态模块:ngx_http_stub_status_module
        location = /basic_status {
            stub_status;
        }
        第一步:重新创建虚拟主机,编写配置文件
        vim server.conf
        server{
            listen  80;
            server_name  status.test.com;
            stub_status;
        }           
        第二步:重启nginx,编写映射关系
        10.0.0.7   status.test.com
        第三步:分析数据

        Active connections: 2   
        激活的连接数信息
        accepts 
        发送的连接数汇总  TCP
        handled 
        处理的连接数汇总  TCP
        requests 
        总计请求数量  HTTP(长链接时,一个TCP可有多个HTTP连接)
        Reading: 0 
        nginx服务读取请求报文的数量
        Writing: 1 
        nginx服务响应报文信息数量
        Waiting: 1 
        nginx队列机制,要处理的报文数量(先进行保存,等前面响应完,再处理)

十七、nginx日志 /var/log/nginx/


    
    注意:日志一定要做切割处理
    cat /etc/logrotate.d/nginx

    /var/log/nginx/*.log {
            daily
            missingok
            rotate 52
            compress
            delaycompress
            notifempty
            create 640 nginx adm
            sharedscripts
            postrotate
                    if [ -f /var/run/nginx.pid ]; then
                            kill -USR1 `cat /var/run/nginx.pid`
                    fi
            endscript
    }
   

1、访问日志 access.log  ---ngx_http_log_module   定义日志格式内容


    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;        调用日志格式
    默认都在access.log,也可以每个虚拟主机单独设置。
    
    $remote_addr:显示用户访问源ip地址
    $remote_user:显示认证的用户名信息
    $time_local:访问网站时间
    "$request":请求报文请求行信息
    $status:用户访问状态码信息
    $body_bytes_sent:显示响应的数据大小信息(统计流量)
    $http_referer:记录调用网站资源的连接地址信息(防止盗链)
    $http_user_agent:记录用户使用什么客户端软件进行访问(谷歌、安卓、IE)
    $http_x_forwarded_for:负载均衡

    2、错误日志 error.log  ---Core functionality


        Syntax: error_log file [level]; 指定错误日志路径及记录的级别
        Default:error_log logs/error.log error;
        Context:main, http, mail, stream, server, location

    eg: error_log /var/log/nginx/error.log warn;

    错误级别:
    debug:  调试级别,服务运行的状态信息和错误信息详细显示   信息越多
    info:   信息级别,只显示重要的运行信息的错误信息
    notice: 通知级别,更加重要的信息进行通知说明
    warn:   警告级别,可能出现了一些错误信息,但不影响服务运行
    error:  错误级别,服务运行出现错误,需要进行纠正         推荐选择
    crit:   严重错误级别:必须进行修改调整
    alert:  严重警告级别:即警告,必须进行错误修改
    emerg:  灾难级别,服务以及不能进行正常运行               信息越少

十八、location作用说明


    模块说明:ngx_http_core_module
    location进行匹配(uri)
    错误页面优雅显示
    location /cq {
        root /home/cq;
        error_page 404 /cq.jpg;
    }

    location详细配置
    Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
    location @name { ... }
    Default:    —
    Context:    server, location

    location = / {           ---精确匹配     优先级老大
        [ configuration A ]
    }

    location / {                ---默认匹配   优先级最低
        [ configuration B ]
    }

    location /documents/ {        ---按照目录进行匹配  优先级老三
        [ configuration C ]
    }

    location ^~ /images/ {   --优先匹配/不识别uri信息中的符号  优先级老二
        [ configuration D ]
    }

    location ~* \.(gif|jpg|jpeg)$ {   ---不区分大小写   优先级老三
        [ configuration E ]
    }

十九、利用nginx实现跳转功能


    1、利用rewrite模块实现跳转功能:http_rewrite_module


        Syntax: rewrite regex replacement [flag];  
        rewrite 匹配的正则信息 替换成什么信息
        Default:    —
        Context:    server, location, if

    eg: rewrite ^/(.*) http://www.test.com/$1 permanent;
        ^/                 (.*)        permanent
        test.com   /    aaa.html      跳转方式(永久)
        www.test.com/aaa.html

        跳转方式
        永久跳转:permanent  301  客户端缓存跳转的信息
        临时跳转:redirect  302 客户端不会保存

 

        打破出现无限循环方法:
        1、在默认server上面再加一个server,server_name=test.com,rewrite=..


        server{
            listen 80;
            server_name test.com;
            rewrite ^/(.*) http://www.test.com/$1 permanent;
        }
        server {。。。}

        2、利用if判断


        if ( $host ~* "^test.com$" ) {
            rewrite ^/(.*) http://www.test.com/$1 permanent;
        }

    2、利用return       

server{
            listen 80;
            server_name test.com;
            return  301 http://www.test.com;
        }
        server {。。。}   

 

 

你可能感兴趣的:(nginx,linux,nginx,centos,服务器)