前端快速入门Nginx配置

栏目: 服务器 · Nginx · 发布时间: 4年前

内容简介:Nginx作为当下最火的http服务器之一,相信作为前端开发者的你,尽管没有使用过,但你一定有所耳闻。其特点有支持海量高并发,轻量且配置简单。用官方的话来说就是:"Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。"好吧我承认我也不是很能理解官方这句话,但这里我们只需记住两个关键词,
前端快速入门Nginx配置

Nginx作为当下最火的http服务器之一,相信作为前端开发者的你,尽管没有使用过,但你一定有所耳闻。其特点有支持海量高并发,轻量且配置简单。用官方的话来说就是:

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

好吧我承认我也不是很能理解官方这句话,但这里我们只需记住两个关键词, 反向代理负载均衡 ,这便是Nginx最大的特点,并且只需要简单的配置便可以完成。对于不是专业运维的我们而言,Nginx的简易是十分友好的,下面我们便来开始学习Nginx的基本配置,让我们快速的上手使用Nginx吧。

一、环境准备

这里我个人推荐大家使用阿里云的ECS云服务器,因为比较方便,随时随地都可以进行操作,就不需要自己去装虚拟机什么的那么麻烦啦。

如果你还在校或者是应届毕业生的话在阿里云上面有学生优惠,认证一下就可以购买了,不到10块钱一个月,可以说是相当划算了。贴上链接: 阿里云服务器学生优惠版 ...

下面是以CentOS7.3 64位操作系统进行配置的,关于 Linux 命令行这里也只用到一些基础的,遇到不懂的大家可以自行百度,这里就不再赘述啦。

先安装一些必要的依赖,以便于后续的操作

yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim
复制代码

安装Nginx

在命令行终端输入:

vim /etc/yum.repos.d/nginx.repo
复制代码

然后将官网提供的yum源复制到文件里面去

(按键盘i表示输入状态,输入完成之后按esc然后:wq保存并退出)

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
复制代码

复制进去后还需要改一下对应的操作系统和版本号,例如CenteOs7改成如下

baseurl=http://nginx.org/packages/centos/7/$basearch/
复制代码

开始安装

yum install nginx
复制代码

安装完成后输入命令nginx -v查看版本号,出现以下提示则安装成功:

前端快速入门Nginx配置

阿里云安全组配置:

  1. 打开你的阿里云控制台,进入ECS实例;
  2. 点击实例后面的更多,移到网络和安全组,点击安全组配置
  3. 点击右上角添加安全组配置,添加配置如下:
前端快速入门Nginx配置

二、Nginx基本配置文件详解

进入nginx目录下用vim打开nginx.conf配置文件

cd /etc/nginx
vim nginx.conf
复制代码

以下是每项配置的含义

#定义Nginx运行的用户和用户组
user  nginx;
#nginx进程数,建议设置为等于CPU总核心数
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;   #nginx访问日志存放位置

    sendfile        on;   #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on。
                          #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    #tcp_nopush     on;    #防止网络阻塞

    keepalive_timeout  65;  #长连接超时时间,单位是秒

    #gzip  on;  #开启gzip压缩

    include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件,表示conf.d文件夹下.conf后缀的文件都会归入nginx配置中

复制代码

default.conf配置项详解进入conf.d,输入 vim default.conf 查看文件

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;    #默认访问文件
    }

    #error_page  404              /404.html;   # 用于配置404页面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;   #错误状态码对应的显示页面
    # location后面的内容可以为正则匹配
    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;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

复制代码

三、Nginx服务启动、关闭和重载

启动

nginx
复制代码

关闭

nginx -s quit # 进程完成当前工作后才停止
nginx -s stop # 无论进程是否在工作,立即停止
killall nginx # 杀死进程,当以上两种操作无效时可以使用该命令
复制代码

重新载入配置文件

每次修改了nginx配置项时都要进行重载

nginx -s reload
复制代码

查看端口号

默认情况下nginx启动后会监听80端口来提供http服务,当出现启动失败的情况时则要查询一下端口是否被占用:

netstat -tlnp
复制代码

四、错误页面的自定义和访问权限控制

自定义错误页面

当页面访问出现错误时,我们通常需要通过不同的错误类型给用户返回不同的错误页面提示,让用户可以返回其他页面进行操作,达到较好的用户体验,这种提前预知错误并采取相应措施的做法也是我们必须具备的开发思想,Nginx就可以很方便的帮我们做这一点。

打开nginx目录下conf.d文件夹下的default.conf,可以看到有以下两个配置项

error_page   500 502 503 504  /50x.html;    # 表示多个错误类型指向同一页面
error_page   404  /404_error.html;          # 单独为一个错误类型指定返回页面
复制代码

通过对 error_page 进行配置错误类型和相应返回的html文件路径,我们就可以友好的给用户返回相应的错误提示界面啦。

访问权限设置

顾名思义,即对用户的访问进行控制,比如我们通常有些页面是不希望用户访问的,尽管用户不知道我们的文件路径,但不能排除一些误操作或者恶意操作等,所以为了提高应用的安全性,我们必须对用户进行一些权限设置。

location / {
        allow  47.102.143.128;   # 设置允许访问的用户Ip
        allow  192.168.1.16;
        deny   all;              # 设置拒绝访问的用户, all表示所有
        # 值得注意的是,权限的配置是由上往下进行匹配的,这里先允许了两个Ip,后面未匹配到的则全部禁止访问
        # 但是如果deny all在上面,则下面的规则将不再进行匹配,尽管下面设置了allow也会失效
        # 同理allow all也是如此
 }
 
 # 指定一些文件或者路径的访问权限
 location =/public {    # "="表示精确匹配
        allow all;
 }
 location =/private {
        deny all;
 }
 location ~\.php$ {     # 使用正则表达式进行匹配, 表示禁止访问以 php 结尾的文件
        deny all;
 }
复制代码

五、虚拟主机配置

首先我们要了解什么是虚拟主机呢?

虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。

我们可以简单把它理解为是从主服务器上面分割出来的子服务器,并且同样具备提供web服务的功能,意味着我们可以只用一台服务器就可以部署多个网站,这样我们就可以把我们平时做的项目阿,demo啊,简历啊什么的只用一台服务器就可以全部部署上线,面试的时候我们就可以尽量多的展示我们的技能啦。

基于端口号配置虚拟主机

根据Nginx监听多个端口号来区分不同的网站。

(这里要注意检查我们的ESC服务器安全组规则中要允许访问你配置的端口号,不然会出现端口无法访问的情况)

我们可以在conf.d文件夹下面新建一个自配置文件,注意要要.conf结尾

server{
        listen 8008;
        server_name localhost;
        root /usr/share/nginx/html/server8008;
        index index.html;
}
server{
        listen 8009;
        server_name localhost;
        root /usr/share/nginx/html/server8009;
        index index.html;
}
复制代码

接着我们 nginx -s reload 重载下配置,并在控制输入 netstat -tlnp 可以看到,8008、8009、80端口都处于运行状态。意味着我们可以在这三个不同端口部署你想要展示的东西啦。

使用域名设置虚拟主机

这里我们首先要注册一个域名,如果你想把你的作品展示给别人,我也强烈建议你去注册一个域名,毕竟没人会去记住一个ip地址的。

接着我们先对域名进行解析(域名的解析要进行一系列认证和备案,不然可能会解析失败,这些到阿里云上面去操作就可以了)

server{
        listen 80;
        server_name xxx.xxx.com;    # 这里是你解析出来的域名
        location / {
                root /usr/share/nginx/html/server8008;
                index index.html index.html;
        }
}

server{
        listen 80;
        server_name xxx2.xxx.com;    # 这里是你解析出来的另一个域名
        location / {
                root /usr/share/nginx/html/server8009;
                index index.html index.html;
        }
}
复制代码

修改完成后重载配置,就可以通过你配置的两个域名分别进行访问啦。

六、反向代理与负载均衡

何谓反向代理,先看一张图片:

前端快速入门Nginx配置

可以看到当用户访问nginx代理服务器后,nginx将请求转发到其他的服务器上面,而转发到哪一台服务器则完全由我们的nginx来控制

反向代理的好处:

  1. 提高安全性: 通过nginx的反向代理,用户并不知道自己访问的真实服务器是哪一台,这样就很好的将我们的服务器保护了起来;
  2. 实现负载均衡:通过上图可以看到,反向代理可以将用户请求分发到多台服务器上面,这样我们便可以在多台子服务器上面提供不同的服务,减轻了我们主服务器的压力,从而实现负载均衡的效果。

反向代理的简单实现

server{
        listen 80;
        server_name xxx.xxx.com;
        location / {
               proxy_pass 192.168.1.16 # 代理的ip或域名
        }
}
复制代码

这样配置之后,当用户访问xxx.xxx.com时,nginx便会帮我们代理到192.168.1.16这台服务器下,这就实现了一个反向代理。

反向代理的其他配置

proxy_set_header
proxy_connect_timeout
proxy_read_timeout
proxy_send_timeout
proxy_redirect

七、Nginx识别不同设备

我们可以访问一下淘宝或者京东的网站,然后打开通过chrome浏览器的开发者工具,当切换到移动设备刷新后,它便会给我们呈现出移动端的页面,这一操作Nginx同样可以帮我们做到。

通过Nginx内置变量 $http_user_agent 获取请求客户端的userAgent

server{
        listen 80;
        server_name xxx.xxx.com;
        location / {
         root /usr/share/nginx/pc;  # 正常状态下访问呈现PC端网站
         if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {    # 获取用户设备信息
            root /usr/share/nginx/mobile;   # 当用户为移动设备访问时呈现移动端网站
         }
         index index.html;
        }
}
复制代码

以上所述就是小编给大家介绍的《前端快速入门Nginx配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective C++

Effective C++

[美]Scott Meyers / 侯捷 / 电子工业出版社 / 2006-7 / 58.00元

《Effective C++:改善程序与设计的55个具体做法》(中文版)(第3版)一共组织55个准则,每一条准则描述一个编写出更好的C++的方式。每一个条款的背后都有具体范例支撑。第三版有一半以上的篇幅是崭新内容,包括讨论资源管理和模板(templates)运用的两个新章。为反映出现代设计考虑,对第二版论题做了广泛的修订,包括异常(exceptions)、设计模式(design patterns)......一起来看看 《Effective C++》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具