Nginx快速入门

by Janden.Ma at 2019-01

本教程使用Linux(CentOS 7)作为操作系统,建议配置Linux虚拟机,或购买Linux云服务器;

如果没使用过Linux或对于Linux命令行不熟悉的小伙伴,请先学习Linux入门。

去粗取精,去伪存真,稳扎稳打,实事求是。

一、什么是Nginx

        如果你不是一个前端开发人员或是入门级的前端开发,也许你没听过Nginx,但如果你是一个初级往上的前端开发,就一定听说过Nginx。如果你用过它,那么你应该不会是一个「切图仔」...

        Nginx作为一个轻量级的HTTP服务器,它具有极好的IO性能,这得力于它采用事件驱动的异步非阻塞处理方式框架。这使得它时常用于服务端的反向代理和负载均衡。

        事件驱动:即当前时间点发出事件请求的时候,立即调动可用资源,完成事件请求,以保证事务及时高效地解决,避免滞缓堆积。

        异步:也被称为并发,与同步(也叫串行)对立,属于消息通信机制。同步机制在发出请求后,在没有得到结果之前,会一直等待,可能会「占线」。而异步机制在发起请求后,就去干别的事情了,然后通过「轮询」或「回调」的方式,来试探结果。

        轮询和回调:所谓的轮询,就是在间断的时间周期里「打电话」向被请求者要结果,效率相对会比较低。而回调则属于订阅模式,在被请求者得到结果后,第一时间通知请求者。

        负载均衡:即调度者把原本由一个服务器(或一个执行单元)的压力(我们成为「负载」),分摊给多个服务器(或多个执行单元)来执行,由单一服务变为集群服务,从而保持整体性能达到最优。

        反向代理:服务端将客户端的请求,经过解析后,从其关系的一组或多组服务器(簇)上获取资源,并返回给客户端。换句话说,就好比你在商城买东西,这东西不一定是该商城直接生产提供的,可能是从多个供应商那里采购来的,你只知道这个商城有卖,但不一定知道供应商是谁。

        优点

            1.消耗内存较小

            2.支持海量高并发

            3.开源免费试用

            4.可商业化

            5.配置简单

        版本

            1.Mainline version:即开发版本,主要是供开发者或爱好者研究、学习、测试用,也就是折腾用的,不建议用在生产环境。

            2.Stable version:即稳定版本,也就是传说中的长期更新版本,比较稳定、成熟。

            3.Legacy version:即历史版本。

二、环境配置

环境准备

        我们建议使用Linux虚拟机或购买Linux云服务器,鉴于虚拟机或服务器的内存一般都不大,推荐使用无桌面环境的CentOS 7,如果家里有矿,那么装个有桌面环境的deepin或者Ubuntu都是可以的。

        采用虚拟机的小伙伴,这里提供下载镜像(想下载其他的也行,我下面提供的是CentOS 7.5的minimal版本)

        阿里开源镜像:https://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/

        网易开源镜像:http://mirrors.163.com/centos/7.5.1804/isos/x86_64/

        采用虚拟机的话,安装成功后要进行网卡配置以及vim,自行搜索,或等后续Linux教程。

环境配置

        1.安装编译器等必要程序

            yum -y install gcc gcc-c++ autoconf pcre-devel makeautomake

        2.配置yum的Nginx源

            (1)创建nginx.repo文件

                vim /etc/yum.repos.d/nginx.repo

            (2)写入内容,里边的/centos/7根据你的操作系统和版本进行变换

                [nginx]

                name=nginx repo

                baseurl=http://nginx.org/packages/centos/7/$basearch/

                gpgcheck=0

                enabled=1

        3.安装Nginx

            yum install nginx -y

        4.查看版本,如果正常就说明安装成功

            nginx -v

        5.查看文件安装路径

            rpm -q -l  nginx

三、配置文件解读

        1.nginx.conf,这是Nginx的总配置文件,位于/etc/nginx下

        (1)进入配置文件

            cd/etc/nginx

            vim nginx.conf

        (2)配置文件注释


            #用户,一般为Nginx

            user  nginx;

            #Nginx进程,一般设置为和CPU核数一样

            worker_processes1;

            #错误日志存放目录

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

            #进程pid存放位置

            pid        /var/run/nginx.pid;

            events {

                # 单个后台进程的最大并发数

                worker_connections1024;

            }

            http {

                #文件扩展名与类型映射表

               include       /etc/nginx/mime.types;

                #默认文件类型

               default_type  application/octet-stream;

                #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  /var/log/nginx/access.log  main;

                #开启高效传输模式

               sendfile        on;

                #减少网络报文段的数量

                #tcp_nopush     on;

                #超时时间

                keepalive_timeout    65;

                #开启gzip压缩

                #gzip  on;

                #包含的子配置项位置和文件

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

        }


        2.default.conf,服务器默认配置,位于/etc/nginx/conf.d下

        (1)进入配置文件

            cd/etc/nginx/conf.d

            vim default.conf

        (2)配置文件注释


        server {

            #配置监听端口

            listen    80;

            #配置域名

           server_name  localhost;

            #charset koi8-r;

            #access_log  /var/log/nginx/host.access.log  main;

           location / {

                #服务默认启动目录

               root   /usr/share/nginx/html;

                #默认访问文件

               index  index.html index.htm;

           }​

            #配置404页面

            #error_page  404              /404.html;

            # redirect server error pages to the static page /50x.html

            #

            #错误状态码的重定向显示页面,配置后需要重启

            error_page    500    502    503    504    /50x.html;

            location=/50x.html {

               root   /usr/share/nginx/html;

       }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80

    #

    #    location ~ \.php$ {

    #    proxy_pass   http://127.0.0.1;

    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #

    #location ~ \.php$ {

    #    root           html;

    #    fastcgi_pass   127.0.0.1:9000;

    #    fastcgi_index  index.php;

    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

    #    include        fastcgi_params;

    #}


四、Nginx的启动、停止、重启

    启动

        nginx命令启动

            nginx

        Linux的系统控制命令启动(推荐,好管理)

            systemctl start nginx.service

        一般启动成功不会有任何提示,反之会有报错,一般是端口被占用

    停止

            nginx命令停止(必须之前是通过nginx命令启动)

                1.强制停止,不等待

                    nginx -s stop

                2.逐步关闭退出(推荐)

                    nginx -s quit

            Linux的系统控制命令停止(必须之前是通过此命令启动)

                systemctl stop nginx.service

            Linux进程命令停止

                kill all nginx

    重启

        nginx命令重启(必须之前是通过nginx命令启动)

            nginx -s reopen

        Linux的系统控制命令重启(必须之前是通过此命令启动)

            systemctl restart nginx.service

        重新加载配置项,需先停止服务

            nginx -s reload

五、访问权限控制

    在default.conf中,可以通过allow或者deny来控制访问权限。

    1.简单的控制

        location / {

              #deny all; #如果此句在前,则所有都不能访问

              allow127.0.0.1;#允许127.0.0.1访问

              deny all;

        }

    2.复杂的控制,“=”代表精确匹配

    location=/guest{

        deny all;#如果匹配到guest,拒绝所有

    }

    3.正则表达式控制

    location ~\.jsp$ {

        allow all;#如果访问的是.jsp文件,全部放行

    }

六、配置虚拟主机

    配置虚拟主机,可以虚拟的将一个服务主机划分成多个虚拟服务器,每台主机都能独立的对外提供服务,互不干扰。Nginx提供基于端口号、IP和域名三种方式来配置虚拟主机。

    基于端口号

        在default.conf同级目录新建conf配置,监听其他端口即可

        #8080.conf

        server{

            listen8080;

           server_name localhost;

           root /usr/app/xxx/www;

           index index.html;

        }

    基于IP

    一般来说,服务器不会有多个IP,所以很少用到

    #default.conf

    server{

        listen80;

        server_name111.111.111.111;

    }

    基于域名

    相对来说,这种比较常用

    #default.conf

    server{

        listen80;

           server_name default.xxx.com;

    }

    #new.conf

      server{

        listen80;

         server_name new.xxx.com;

         root /usr/app/xxx/www;

         index new.html;

      }    

七、配置反向代理

    延续上面的例子,如果我访问new.xxx.com的时候,服务器让他方向代理到default.xxx.com,那么需要做一个配置

    #new.conf

    server{

        listen80;

       server_name new.xxx.com;

       location / {

              proxy_pass http://default.xxx.com;

       }

    }

    其它反向代理指令

    proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。

    proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。

    proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。

    proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。

    proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。

八、适配PC和移动端

    其实在web领域,关于适配PC和移动端的方法一直颇有争论,有人说用自适应,有人说前端用js判断做出不同渲染,有人说做两套...其实各有利弊,nginx其实也提供了判断客户端类型的方法,来判断用户处于PC还是移动端,从而读取不同的页面给用户。

    #default.conf

    server{

        listen80;

        server_name xxx.com;

        location / {

             root /usr/share/nginx/pc;

            if($http_user_agent~*'(Android|webOS|iPhone|iPod|BlackBerry)') {

            root /usr/share/nginx/mobile;

            }

         index index.html;

        }

    }

九、配置GZip压缩

    Gzip是网页的一种网页压缩技术,经过gzip压缩后,页面体积变小,渲染速度更快。

    Nginx提供了专门的gzip模块,并且模块中的指令非常丰富。

    gzip:该指令用于开启或 关闭gzip模块。

    gzip_buffers:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。

    gzip_comp_level:gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。

    gzip_disable:可以通过该指令对一些特定的User-Agent不使用压缩功能。

    gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。

    gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0.

    gzip_proxied:用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。

    gzip_vary:用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。

    gzip_types:用于设置压缩文件类型。

    在nginx.conf文件中配置

        http{

            #gzip on;

            #gzip_comp_level 5;

            #gzip_types application/javascript text/css;#压缩js和css文件

        }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容