Nginx
Nginx简介
在学习Nginx之前我们需要先大致了解一下Nginx是什么、它能做什么事情,然后再开始学习和使用。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服 务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
简单来说Nginx是一个轻量级Web服务器 与 反向代理服务器。
应用场景
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
正向代理与反向代理
在学习Nginx之前需要先了解正向代理与反向代理的概念。
正向代理
正向代理是指一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理用途
- 访问原来无法访问的资源,如google
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用:
- 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
- 负载均衡,通过反向代理服务器来优化网站的负载
总结:
在正向代理中,代理服务器与客户端同属于一个局域网,对服务器隐瞒了真实的客户端。
在反向代理中,代理服务器与服务端同属于一个局域网,对客户端隐瞒了真实的服务器。
实际上代理服务器在两种代理中做的事都是代为收发请求和响应。不过从结构上来看正好左右互换了一下。所以把后出现的那种代理方式称为反向代理。
安装Nginx
首先我们需要明确Nginx是服务端的东西,所以一般安装在Linux系统之上,我这里使用的是阿里云服务器,系统版本是ubuntu-16。
以下列举三种安装方式:
一、使用apt-get 快速安装
# 切换至root用户
sudo su root
apt-get install nginx -y
查看版本
nginx -v
显示版本信息即安装成功
安装成功后查看配置文件位置:
whereis nginx
安装后文件的位置:
- 主程序
/usr/sbin/nginx
- 配置文件
/etc/nginx
- 静态文件
/usr/share/nginx
- 日志
/var/log/nginx
常用操作指令
以apt-get 方式快速安装的,操作时可直接全局操作。
1、启动Nginx服务
# 启动成功无任何显示,直接访问80端口可查看是否启动成功
sudo service nginx start
2、停止Nginx服务
# 停止成功无任何提示,若停止成功则无法再访问80端口
sudo service nginx stop
3、重启
# 此操作无任何提示,无错误信息则表示执行成功
sudo service nginx restart
4、重新加载
# 此操作无任何提示信息,用于修改nginx配置文件后重新加载
sudo nginx -s reload
5、检测Nginx配置是否正确
sudo nginx -t
配置正确则显示:
6、完全卸载Nginx
apt-get --purge autoremove nginx
可以通过查看版本号检测是否卸载成功:
或者也可以通过进程查看:
上图表示卸载成功
二、在官网下载安装包安装
1、进入官网下载安装包http://nginx.org/en/download.html
下载稳定版即可:
2、将已下载好的安装包发送至服务器
我这里是选择放在 /usr/local/nginx 路径下
或者进入该目录下直接通过命令下载到当前目录
wget http://nginx.org/download/nginx-1.16.1.tar.gz
3、安装相关依赖包
#安装gcc
apt-get build-dep gcc
#安装pcre
apt-get install libpcre3 libpcre3-dev
#安装zlib,压缩、解压
apt-get install zlib1g-dev
#安装openssl,安装套接字层密码库
apt-get install openssl libssl-dev
4、编译Nginx
# 进入nginx目录
/usr/local/nginx/nginx1.16
# 执行命令
./configure
# 执行make命令
make (若此处报错 可以执行 sudo apt-get install build-essential 解决)
# 执行make install命令
make install
以上指令若无报错信息即为执行成功
5、启动Nginx
#进入nginx启动目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx
直接访问80端口,若显示如下网页则启动成功:
也可以通过查看进程来检测是否启动成功:
ps -ef | grep nginx
操作指令
以安装包方式编译安装的Nginx与 直接通过apt-get安装的操作指令有些不同。以安装包方式安装的Nginx,在操作之前必须先进入nginx所在路径,如下:
1、查看Nginx的版本号
./nginx -v
2、启动Nginx
./nginx
3、停止Nginx
./nginx -s stop
4、重新加载Nginx配置文件
./nginx -s reload
配置文件所在位置:
通过安装包编译安装的Nginx在安装完成之后 在/usr/local/ 路径下会自动生成一个 nginx 文件夹
# 配置文件所在路径
/usr/local/nginx/conf/nginx.conf
三、Docker 安装 Nginx
先参考https://www.runoob.com/docker/docker-install-nginx.html (等发表docker篇后再做描述)
配置文件
此时Nginx已经安装成功并且可以启动运行了,接下来我们来了解一下Nginx的配置文件以及相关配置。
配置文件组成
我们打开Nginx的配置文件(不同安装方式的配置文件所在位置不同,上面有详细位置描述),去除掉注释信息,最简单的配置文件如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
由此可见Nginx的配置文件由三部分组成。
-
第一部分:全局块
从配置文件到 events块 之间的内容为 全局块,主要会设置一些影响nginx服务器整体运行的配置指令。
主要包括配置运行 Nginx 服务器的用户(组)、允许生成的worker process 数、进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如:
worker_processes 1;
worker_processes 表示Nginx可支持并发处理量的值,该值越大,则可以支持的并发处理量也越多。
-
第二部分:events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括 是否开启对多work process下的网络连接进行序列化、是否允许同时接收多个网络连接、选取哪种事件驱动模型来处理连接请求、每个work process可以同时支持的最大连接数等。
比如:
# 表示work process 支持的最大连接数为 1024
worker_connections 1024;
这部分的配置对Nginx的性能影响较大,在实际应用中应该灵活配置。
-
第三部分:http块
http块是Nginx服务器配置中最频繁的部分,代理、缓存、和日志定义等绝大多数功能和第三方模块的配置都在这里。
注意:http块也可以包括 http全局块 和 server块。
1、http全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
2、server块
server块和虚拟主机有着密切的关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的生产是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,每个server块就相当于一个虚拟主机。
而每个server块也分为全局server块,以及可以同时包含多个location块。
① 全局server块
最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
② location块
一个server块可以配置多个location块。
这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string)。对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的/uri-string)进行配置,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
Nginx配置实例
-
反向代理
-
负载均衡
-
动静分离