特点

  1. 支持高并发
  2. 内存消耗少
  3. 开源可商用

一、安装

Mac 下安装
1、安装 brew 命令

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2、安装 Nginx

1
brew install nginx

3、启动 Nginx

1
nginx

如果没有报错的话打开 http://localhost:8080 就可以看到效果了。

配置文件所在目录 /usr/local/etc/nginx/nginx.conf

安装文件所在目录 /usr/local/Cellar/nginx

Linux 下安装(本文后面的内容也主要是在 Centos 环境中演示)
先安装一些服务器要用到的东西

1
2
yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim

查看 yum 是否存在

1
yum list | grep nginx

如果存在会如以下图示

image

和官网的对比一下发现不是最新的,所以要增加 nginx 的 yum 源,输入以下命令新建

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

并把以下内容粘贴进去

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

因为我的是 centos 系统,版本是7.2,所以链接里面是 /centos/7,现在再运行一下检查命令就可以查看到最新 nginx 版本了

1
yum list | grep nginx

接着就是安装了

1
yum install nginx

安装完成后输入 nginx -v 查看版本号,如果显示版本就表示安装成功了

image

二、Nginx 配置文件解析

三、启动、停止、重启等常用操作

启动
1、直接使用 nginx

1
nginx

2、使用 systemctl 命令,这个是 Linux 的服务启动命令

1
systemctl start nginx.service

有没有启动成功呢?可以输入以下命令查看

1
ps aux | grep nginx

image

停止
1、立即停止服务。这种方法无论进程是否在运行,都直接停止进程。

1
nginx  -s stop

2、立即停止服务。这种方法相对没那么强硬,需要在进程完成当前工作后再停止。

1
nginx  -s quit

3、killall 直接杀死进程。如果上面的两个方法无效,可以试试这个。

1
killall nginx

4、systemctl 停止。这个和启动方法中第二条类似,都是使用 Linux 的服务命令。

1
systemctl stop nginx.service

重启
重启也是经常会用到的

1
systemctl restart nginx.service

重载配置文件
有时修改了配置文件可以不用重启,直接重载配置文件就可以了。

1
nginx -s reload

查看端口号
有时候需要查看哪些端口在运行,或者被占用了,可以使用 netstat 命令查看

1
netstat -tlnp

四、自定义错误页

自定义错误页
网站发生错误时一般会返回相应的状态码,比如500、502、503等等,或者404页面。那这些对应的返回页面在 Nginx 里怎么配置呢。

进入 /etc/nginx/conf.d 目录 打开 default.conf 配置文件就可以作相应的修改了

image

添加404页面配置,当然你还要在网站根目录创建一个404.html页面才行

image

其中 /404.html 也可以改成一个链接地址如: (https://pojian.xyz)[https://pojian.xyz],这样当你访问为404状态时就会直接跳转到你配置的这个链接地址。

最后还需要你执行重载配置文件或者重启服务器,再访问相应的页面就会看到对应的效果页。

五、访问权限设置

指令优先级
打开配置文件

1
vi /etc/nginx/nginx.conf

在 location 里填写 deny 和 allow 配置信息,deny 和 allow 后面可以填写 ip 或者一个 ip 段,再或者 all,all 表示全部,比如这里我填写的是我本机的ip,allow 表示允许该 ip 的访问,接着重启 nginx

1
2
nginx -s quit
nginx

image

上面的配置表示只允许 113.118.186.11 进行访问,其他的IP是禁止访问

image

如果上面的 allow 和 deny 位置互换一下呢?

1
2
deny all;
allow 113.118.186.11;

这里你会发再所有 ip 都不能访问了,这就说明了配置对顺序是有要求的,同一个块下的两个权限指令,先出现的设置会覆盖后出现的设置。

其他访问控制权限匹配
有时权限控制会比上面的情况会多样一点,比如站点下的 images 文件是所有用户都可以访问的,而 admin 文件夹只有管理员才能访问,这时就需要 location 来配合实现了

六、配置虚拟主机

基于端口号
基于端口号配置多个虚拟主机,根据不同的端口号来访问不同的站点,原来就是监听端口号。

可以直接配置了主配置文件 etc/nginx/nginx.conf,也可以配在子配置文件目录下 etc/nginx/conf.d,这里拿配置在子文件做示例

etc/nginx/conf.d/default.conf 默认监听的是 80 端口,指向的目录是 /data/www

1
vim /etc/nginx/conf.d/default.conf

image

现在我们配置添加一个新的虚拟主机,监听 8081 端口

1
vim /etc/nginx/conf.d/8081.conf

8081.conf 具体配置如下,监听的端口为 8081,指向的目录是 /data/www/8081,和 80 端口指向的目录不一样

image

这里需要你自己去新建一个 8081 目录和 index.html 文件

1
2
mkdir /data/www/8081
vim /data/www/8081/index.html

最后访问 xxx.com 和 xxx.com:8081 会访问到不同的站点,当然前提是你的域名已经解析到你的服务器,要不然的话就只能通过 ip 访问了 xxx.xxx.xx.xx 和 xxx.xxx.xx.xx:8081 访问。

基于域名配置

基于域名配置,我这里先说一个前提,就是你的域名已经成功解析到服务器。

image

下面开始配置 nginx

/etc/nginx/conf.d/default.conf 配置文件监听的是 80 端口,指向目录是 /data/www,注意看 server_name 改成域名地址

image

接着我们来配置另外一个虚拟站点 /etc/nginx/conf.d/8081.conf,注意了 这里监听我端口也是 80 端口,不是其他的端口号,但 server_name 和 root 目录跟上面的不一样

image

这样当你访问 nginx.pojian.xyz 和 nginx2.pojian.xyz 时访问会是配置的不同的两个站点。

七、反向代理

正向代理
A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云爸爸借钱,可想而知,最后碰一鼻子灰回来了,情急之下,他想到一个办法,找关系开后门,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,就是代理,也可以说是正向代理,王老师代替A同学办这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。

我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些科学上网工具扮演的就是典型的正向代理角色。用浏览器访问 http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。
image

反向代理

大家都有过这样的经历,拨打10086客服电话,可能一个地区的10086客服有几个或者几十个,你永远都不需要关心在电话那头的是哪一个,叫什么,男的,还是女的,漂亮的还是帅气的,你都不关心,你关心的是你的问题能不能得到专业的解答,你只需要拨通了10086的总机号码,电话那头总会有人会回答你,只是有时慢有时快而已。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务人的是谁。

反向代理隐藏了真实的服务端,当我们请求www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,具体访问哪台服务器Server是由Nginx来控制的,一般用来做负载均衡。

image

两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端

最简单的反向代理

下面就说一个最简单的反向代理配置,先打开我们前面配置的 8081 端口虚拟站点配置文件

1
vim /etc/nginx/conf.d/8081.conf

image

原来的 root 和 index 不要了,换成一个 location 代理地址,看下图

image

这样当你访问 nginx2.pojian.xyz 的时候 nginx 会帮你反向代理到 https://pojian.xyz 这个地址上去,proxy_pass 一般是填写 ip,但填写域名也可以。

其它一些较常用的反向代理指令

  • proxy_set_header: 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。
  • proxy_connect_timeout: 配置Nginx与后端代理服务器尝试建立连接的超时时间。
  • proxy_read_timeout: 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
  • proxy_send_timeout: 配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。
  • proxy_redirect: 用于修改后端服务器返回的响应头中的Location和Refresh。

八、开启 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压缩。

最简单的配置

1
2
3
4
5
6
http {
.....
gzip on;
gzip_types text/plain application/javascript text/css;
.....
}

image

评论