前言
在工作的过程中,慢慢发现自己的不足,借此机会,学习了解一下Nginx。
一、什么是Nginx?
1.Nginx 同 Apache 一样都是一种 Web 服务器。
2.Nginx是一款 轻量级 的 Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
二、正反向代理是什么?
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。
1.正向代理
正向代理 “代理” 的是 客户端,而且 客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。
正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。
比如:由于防火墙的原因,我们并不能直接访问谷歌、推特,看GitHub等等,那么我们可以借助 VPN 来实现。
2.反向代理
反向代理 “代理” 的是 服务器端,而且这一个过程对于客户端而言是透明的。
比如:外网 访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理。
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。
反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
三、负载均衡?
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载均衡分发到不同的服务器,也就是我们所说的负载均衡。
负载均衡的方式:
1.轮旋(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.weight(加权轮旋)
指定轮询几率,weight和访问比率成正比。权重越高,在被访问的概率越大。
3.ip_hash
在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
Upstream 指定后端服务器地址列表,在 server 中拦截响应请求,并将请求转发到 Upstream 中配置的服务器列表(配置只是指定了 nginx 需要转发的服务端列表,并没有指定分配策略)。
#默认轮旋
upstream balanceServer {
server 10.1.22.33:8081;
server 10.1.22.33:8082;
}
#权重
upstream balanceServer {
server 10.1.22.33:8081 weight = 10;
server 10.1.22.33:8082 weight = 20;
}
#ip_hash
upstream balanceServer {
ip_hash;
server 10.1.22.33:8081;
server 10.1.22.33:8082;
}
server {
server_name 10.1.22.33;
listen 80;
location /api {
root html;
proxy_pass http://balanceServer;
index index.html index.html;
}
}
四、动静分离?
为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项;针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。
通过location配置段配合正则匹配实现静态与动态页面的不同处理方式。
目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
五、常用命令?
# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop
# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit
# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload
# 重新打开日志文件
nginx -s reopen
# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename
# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t
# 显示 nginx 的版本
nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V
# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua
cd /usr/local/nginx/sbin/
./nginx 启动
ps aux|grep 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 配置文件有三部分组成:
1.全局模块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。
2.event模块
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
3.http模块
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;#当出现以上状态码时从新定义到50x.html
location = /50x.html { #当访问50x.html时
root html; #50x.html 页面所在位置
}
}
}
需要注意的是:http 块也可以包括 http全局块、server 块。
- http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。 - server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
http {
sendfile on #高效传输文件的模式 一定要开启
keepalive_timeout 65 #客户端服务端请求超时时间
log_format main XXX #定义日志格式 代号为main
access_log /usr/local/access.log main #日志保存地址 格式代码 main
}
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
下面是 nginx 一些配置中常用的内置全局变量,你可以在配置的任何位置使用它们。
七、Nginx安装?
1.安装依赖包
//一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2.下载解压安装包
//创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
//下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
3.安装nginx
//进入nginx目录
cd /usr/local/nginx
//进入目录
cd nginx-1.13.7
//执行命令 考虑到后续安装ssl证书 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
//执行make命令
make
//执行make install命令
make install
4.启动nginx
cd /usr/local/nginx/sbin
./nginx
5.查看
ps -ef | grep nginx
安装完成一般常用命令
cd /usr/local/nginx/sbin #进入安装目录中
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重启
6.在window访问:
查看虚拟机端ip
window浏览器输入:
192.168.130:80,效果如下:
八、反向代理示例?
1.安装tomcat(不做描述),并启动tomcat
cd /usr/tomcat9054/bin
./start.sh
2.配置nginx的配置文件:nginx.conf
cd /usr/local/nginx/conf
vim nginx.conf
server {
listen 80;
server_name 192.168.80.130; #自己虚拟机的ip
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
3.设置window端的域名跟ip的对应关系
C:\Windows\System32\drivers\etc
4.启动nginx,浏览器输入www.sun123.com