Nginx
一、什么是Nginx
Nginx(engine x)是一个轻量级高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,Nginx是一个安装非常简单、配置文件非常简洁,(支持perl语法)、Bug非常少的服务。Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够达到高达50000个并发连接的响应。
二、Nginx的作用
Http代理,反向代理:作为Web服务器最常用的功能之一,尤其是反向代理,反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端做任何设定。
正向代理和反向代理的区别:
替真正的client,向server申请服务的是正向代理
正向代理是client的行为,目的是为了伪造出client身份
替真正的server,给client提供服务的是反向代理
反向代理是server方的行为,目标是伪造出server身份
正反向代理的作用:
client使用正向代理隐藏了自己的真实身份,server用反向代理保护了server的安全
Nginx的作用:
Nginx前台服务器上做些安全处理,比如"防止客户藏屎",对于一些疑似不安全的请求记录,就不转发到后台主服务器,
黑客"DDOS"攻击导致服务器崩溃,主要生成环境没被破坏,可以快速搭建一个新的nginx服务器,nginx服务器搭建肯定比系统主环境服务器简单,
快速搭建的话,一般都有搭建脚本,用git或svn拉一下nginx配置文件,跑起来就恢复了,有些还在tx云或者al云上有对应的系统镜像,搭建更快
作为常见的Web服务器,动静分离,在软件开发中,有些请求是需要后台处理的,有些请求是不需要经后台处理的(如:css、html、js 等文件),这些不需要后台处理的文件称为静态文件。让动态网站里的动态网页一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
三、Nginx的负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
扩展策略,就天马行空,只有你想不到的没有你做不到的。
轮询
加权轮询
ip_hash
ip_hash对客户端的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决
session不共享的问题。
四、Nginx的安装
下载nginx官网链接下载稳定版本。找系统对应的版本。
1.Windows下安装
1.启动Nginx
有很多启.ginx.exe,双击之后有一个黑色的弹窗一闪而过
②使用cmd命令窗口,切换到nginx目录下,输入命令nginx.exe,回车即可
检查nginx是否安装成功
在浏览器输入http://localhost/回车,出现以下页面说明安装成功!
2.配置监听
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
当我们修改了nginx的配置文件nginx.config时,不需要关闭nginx后重新启动nginx,只需要执行命令nginx -s reload即可让改动文件生效
3.关闭Nginx
如果使用cmd窗口启动nginx,关闭cmd窗口是不能结束nginx进程的
两种关闭nginx的方法:
-
输入nginx命令 nginx -s stop(快速停止nginx)或nginx -s quit(完整有序的停止nginx)
-
使用taskkil taskkill /f /t /im nginx.exe
-
1.taskkil是用来终止进程的。
-
2./f是强制终止
-
3./t终止指定的进程和任何由此启动的子进程
-
4./im 表示示指定的进程名称
-
2.Linux下安装
1.安装gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装:
yum install gcc-c++
2.PCRE pcer-devel安装
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括Perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在Linux上安装pcre库,pcre-devel是使用pre开发的一个二次开发库,nginx也需要此库。命令:
yum install -y pcre pcre-devel
3.zlib安装
zlib库提供了很多种压缩和解压缩的方式,nginx使用zib对http包内的内容进行gzip,所以需要在CentOS上安装zlib库。
yum install -y zlib zlib-devel
4.OpenSSL安装
OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的的使用。Nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在CentOS上安装OpenSSL库。
yum install -y oppenssl oppenssl-devel
5.wget安装
yum install wget
6.下载nginx
wget http://nginx.org/download/nginx-1.20.2.tar.gz
7.解压(在root目录下)
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
8.配置
使用默认配置,在nginx根目录下执行,确保以上命令都执行
首先创建要安装的目录文件
mkdir -p /usr/local/nginx
安装到指定目录下
./configure --prefix=/usr/local/nginx
编译安装
make && make install
查看安装路径
whereis nginx
编辑配置文件:使用FileZilla 点击本地编辑
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name manage.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://192.168.58.1:9001;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
server {
listen 80;
server_name api.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 上传路径的映射
location /api/upload {
proxy_pass http://192.168.58.1:8083;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/api/(.*)$" /$1 break;
}
location / {
proxy_pass http://192.168.58.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
重新加载配置文件:
伪装主机地址:
测试连接:
首先需要关闭本机防火墙,然后在浏览器的网址输入manage.leyou.com
主机绑定:
默认我们的前端项目绑定的host是: localhost,因此只能在本机访问,要想通过虚拟机访问,就必须修改Host绑定地址
修改config目录下的index.js 文件
修改绑定地址,修改成0.0.0.0 表示绑定任意的主机
远程代理解析图:
3.Nginx目录结构
安装完Nginx后,Nginx的目录结构如图:
重点目录/文件:
- conf/nginx.conf nginx配置文件
- html 存放静态文件(html、css、js等)
- logs 日志文件,存放日志文件
- sbin/nginx 二进制文件,用于启动,停止Nginx服务
4.Nginx常用命令
进入nginx,sbin目录下
cd /usr/local/nginx/sbin
查看版本
./nginx -v
3.检查配置文件的正确性
./nginx -t
启动Nginx服务
./nginx
停止Nginx服务
./nginx -s stop
安全退出Nginx服务
./nginx -s quit
查看nginx进程
ps aux|grep nginx
重新加载配置文件
./nginx -s reload
配置环境变量
vim /etc/profile
追加:
PAHT=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
保存生效:
source /etc/profile
启动成功访问 服务器ip:80
注意:
CentOS7关闭防火墙
systemctl stop firewalld
5.Nginx配置文件结构
整体结构介绍
Nginx配置文件(cong/nginx.conf)整体分为三部分:
-
全局块 ( 和Nginx运行相关的全局配置)
-
events块 ( 和网络连接相关的配置)
-
http块(代理、缓存、日志记录、虚拟主机配置)
-
http全局快
-
Server块
-
Server全局块
-
location块
-
-
注意:http块中可以配置多个Server块,每个Server块中可以配置多个location块。
全局块:
事件块:
Http块:
五、Nginx具体应用
1.部署静态资源
Nginx可以作为静态web服务器来部署静态资源。静态资源 指在服务端真实存在并且能够直接展示的一些文件,
比如常见的html文件、css文件、js文件、图片、视频等资源。
相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。
将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。
server {
listen 80; # 监听端口
server_name localhost; # 服务器名称
location { # 匹配客户端请求url
root html; # 指定静态资源根目录
index index.html; # 指定默认首页
}
}
2.反向代理
配置反向代理
server {
listen 82;
server_name localhost;
location {
proxy_pass http://192.168.81.129:8080; #反向代理配置,将请求转发到指定服务
}
}
3.负载均衡
早期的网站流量业务功能都比较简单,单台服务器就可以满足基本要求,但是随着互联网的发展,业务流量越来越大并且业务逻辑越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障的出现。
应用集群:将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回效应数据
负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理
配置负载均衡:
upstream targetserver{ # upstream指令可以定义一组服务器
server 192.168.81.129:8080;
server 192.168.81.129:8081;
}
server {
listen 80;
server_name localhost;
location {
proxy_pass http://targetserver; #反向代理配置,将请求转发到指定服务
}
}
3.负载均衡策略
名称 | 说明 |
---|---|
轮询 | 默认方式 |
Weight | 权重方式 |
ip_hash | 依据ip分配方式 |
least_conn | 依据最少连接方式 |
url_hash | 依据url分配方式 |
Fair | 依据响应时间方式 |