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文件

        }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容