nginx
nginx
简介
nginx是一高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
nginx专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。
反向代理服务器
作用
请求转发(反向代理)
正向代理
可以举个形象的例子来说明:有一天,A君看到C君有巧克力(资源),然后A君就想吃C君的巧克力。可是怎么办,A君和C君不熟吖,不能直接向C君要巧克力吃(访问受限)。这时A君就很苦恼,要怎样做才能吃到C君的巧克力呢?于是A君想啊想啊终于想到了一个办法,就是找和C君关系好的B君(代理),找他去和C君要巧克力,然后再从B君那里拿到巧克力吃。这样,A君就吃到C君的巧克力了,即使C君可能永远不会知道A君吃了TA的巧克力。
反向代理
同样举个例子来说明:有一天,A君想吃巧克力了,就打电话给B君,B君也没有巧克力,可是却不告诉A君,而是悄悄去向C君要了巧克力,然后给A君送了过去。A君只会以为巧克力是B君的,永远不知道C君的存在。实际上,A君只要知道B君能给到TA巧克力就足够了,至于巧克力是怎么来的,其实一点都不重要。
负载均衡
后面的话,做负载均衡用网关,比较简单,不用nginx
动静分离
比较常用的一种方法就是:把静态文件独立放在一个服务器上,从而提高我们的访问效率。
比如在tomcat中放java代码,专门找一个服务器放静态资源,当访问的是java代码就去tomcat中,当访问的是静态资源就去另外一个服务器 。
安装和使用
在windows下安装nginx
下载链接,下载稳定版windows的nginx,然后解压,在cmd运行
D:\Environment>cd /d D:\Environment\nginx-1.18.0
-- 开启
D:\Environment\nginx-1.18.0>nginx.exe
效果:光标在闪
-- 关闭
在另一个cmd中窗口输入,不建议直接关运行的窗口,会关不干净
D:\Environment\nginx-1.18.0>nginx.exe -s stop
linux下可以使用宝塔面板直接安装,但是有一个问题:面板不支持apache和nginx共存
1.一键安装依赖包
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2.创建nginx文件夹并下载解压安装包
//进入local文件夹
cd /usr/local
//创建nginx文件夹
mkdir nginx
//进入nginx文件夹
cd nginx
//下载
wget http://nginx.org/download/nginx-1.13.7.tar.gz
//解压
tar zxvf nginx-1.13.7.tar.gz
- 安装nginx
//进入nginx目录
cd /usr/local/nginx/nginx-1.13.7
//执行命令
./configure
//执行make命令
make
//执行make install命令
make install
- 启动nginx
//进入sbin文件夹
cd /usr/local/nginx/sbin/
//启动
./nginx
//启动后可在浏览器输入ip地址查看是否成功
常用命令
进入安装目录中,sbin
cd /usr/local/nginx/sbin
//启动
./nginx
//关闭
./nginx -s stop
ps -ef | grep nginx
配置文件
位置
cd /www/server/nginx/conf
组成
第一部分:全局块
从配置文件开始到events之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
比如worker_processes 1
,值越大,可以支持并发处理量就越多
第二部分:events块
主要是影响nginx服务器与用户的网络连接
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
比如worker_connections
支持最大的连接数
第三部分:http块
nginx中配置最频繁的部分,包括http块和server块
http
{
include mime.types;
#include luawaf.conf;
....
}
server
{
listen 888;
server_name phpmyadmin;
index index.html index.htm index.php;
...
}
配置实例
以linux中的nginx为例子
反向代理1
1、实现效果
(1)打开浏览器,在浏览器地址栏中输入地址 www.123.com 跳转到linux系统主页中
2、准备工作
(1)在linux系统安装tomcat(要用jdk,java -version
,使用默认端口8080
注意:需要在服务器防火墙和阿里云中开放端口
cd /usr/local
mkdir tomcat
//安装tomcat
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
cd tomcat
//解压
tar zxvf apache-tomcat-9.0.39.tar.gz
//启动
cd bin
./startup.sh
//通过查看日志看是否安装成功或者直接在浏览器中输入公网:8080
cd ..
cd logs/
ls
tail -f catalina.out
3、访问过程分析
4、具体配置
第一步 在windows系统的hosts文件进行域名和ip对应关系的配置,文件中加一行
192.168.17.129 www.123.com
测试一下
在浏览器中直接输入www.123.com是不行的,你要带一下端口号
第二步 在nginx进行请求转发的配置(反向代理配置)
server {
listen 80;
server_name 192.168.17.129; //修改了
#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;
}
第三步:重启nginx,在网页输入www.123.com测试
反向代理2
1、实现效果
使用nginx反向代理,根据访问的路径跳转到不同的端口服务中
nginx监听端口为9001
访问 http://192.168.17.129:9001/edu/ 直接跳转到127.0.0.1:8080
访问 http://192.168.17.129:9001/vod/ 直接跳转到127.0.0.1:8081
2、准备工作
(1)准备两个tomcat服务器,一个8080端口,一个8081端口
就需要到其中一个tomcatconf/server.xml
修改端口,避免端口冲突,要改3个地方不是一个
(2)在webapp中创建两个文件夹和测试页面
3、具体配置
找到nginx的配置文件,配置
location中的~
表示是url中包含正则表达式,并且区分大小写
server {
listen 9001;
server_name 8.129.36.122;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
负载均衡
例子
1、实现效果
浏览器地址输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中
2、准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建一个edu文件夹,放a.html,用于测试
3、具体配置
(一)首先准备两个同时启动的Tomcat
(二)nginx.conf中进行配置
http{
...
upstream myserver{
server 192.168.17.129:8080;
server 192.168.17.129:8081;
}
...
server{
listen 9001;
server_name 8.129.36.122;
...
location / {
...
proxy_pass http://myserver;
}
}
}
分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动删除
第二种 weight
weight代表权重,默认是1,权重越高被分配的客户端越多。
upstream myserver{
server 192.168.17.129:8080 weight=5;
server 192.168.17.129:8081 weight=10;
}
第三种方式 ip_hash
每一个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享问题
upstream myserver{
ip_hash;
server 192.168.17.129:8080;
server 192.168.17.129:8081;
}
第四种方式 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream myserver{
server 192.168.17.129:8080;
server 192.168.17.129:8081;
fair;
}