nginx
反向代理:是指客户端在不需要进行任何设置的情况下,发送请求是先到代理服务器,然后在到服务器,然后服务器在返回内容到代理服务器,最后由代理服务器返回到客户端,这样的一个过程
负载均衡:当服务器面对的并发数量很高的时候,我们可以通过nginx将请求进行均分到各个服务器上,减少单个服务器的压力
动静分离:是指将我们的动态资源和静态资源分开放,管理动态资源的服务器就只管动态资源的请求,而静态资源的请求也由静态资源的服务器去处理
nginx 安装
1.安装gcc环境
yum -y install gcc-c++
2.安装PCRE
yum -y install pcre pcre-devel
3.安装zlib
yum -y install zlib zlib-devel
4.安装openssl
yum -y install openssl openssl-devel
5.下载nginx
wget https://nginx.org/download/nginx-1.18.0.tar.gz
6.进入下载nginx的目录解压nginx
tar -zxvf nginx-1.18.0.tar
7.安装nginx
//解压后cd nginx-1.18.0 执行 ls 查看当前文件目录的文件执行
../configure
make && make install
8.安装成功后检查nginx版本
// /usr/local/nginx/sbin/ 这是nginx所处的目录
cd /usr/local/nginx/sbin/nginx -V
如果在sbin目录下:./nginx -V
9.产看nginx进程
ps -ef | grep nginx
10.查看开发的端口号
firewall-cmd --list-all
11.设置开放的端口号
//这里就是加一个80端口
sudo firewall-cmd --add-port=80/tcp --permanent
12.重新启动防火墙
firewall-cmd --reload
//启动之后在使用:firewall-cmd --list-all 查看端口就可以发现新添加的端口号
13.关闭指定端口防火墙
firewall-cmd --permanent --remove-port=80/tcp
nginx常用命令
在没有配置全局变量的情况下,使用nginx命令的时候需要进入到nginx目录下面:cd /usr/local/nginx/sbin
1.nginx启动
./nginx
2.nginx关闭
./nginx -s stop
3.查看nginx进程
ps -ef | grep nginx
4.重新加载nginx
./nginx -s reload
5.查看nginx版本号
./nginx -v
nginx配置文件
nginx配置文件由三个模块构成:
全局模块
从配置文件到events块之间的内容,主要设置一些影响nginx服务器整体运行的命令
worker_processes 1; //值越大,可以支持并发处理的量就越多,worker数和服务器的cpu数量是适宜的,设置少了就会浪费cpu,多了会造成cpu频繁切换的上下文损耗,例如4核的服务器就设置为4就可以了
events模块
涉及的指令主要影响nginx服务器与用户的网络链接
worker_connections 1024; //表示最大的连接数量
http模块
分为http全局块,和server块
配置实例
1.反向代理
(1)实现效果,在浏览器输入www.123.com,跳转到linux系统的tomcat主页面
(2)准备工作,在linux系统安装tomcat工具,使用默认端口8080
*将tomcat安装包上传到Linux服务器上,然后解压
*进入解压后的tomcat文件中的bin目录,运行./startup.sh
*如果报错
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
就需要安装java jdk了
命令:yum install java-1.8.0-openjdk* -y
然后在运行 ./startup.sh
Tomcat started. 就代表运行成功了
(3)然后进入tomcat目录中的logs查看日志
在logs目录下输入:tail -f catalina.out //查看日志
(4)查看防火墙列表
firewall-cmd --list-all //如果有8080端口那么久跳过第五步
(5)添加8080端口
sudo firewall-cmd --add-port=8080/tcp --permanent //添加端口号
firewall-cmd --reload //重启防火墙
(6)然后我们就用通过ip地址+端口号访问tomcat服务器了,如果访问不了,可能是阿里云或者腾讯云的服务的防火墙端口没开,需要到控制台进行设置才可以
一切准备就绪后,在nginx目录,
cd conf
vi nginx.conf
listen 80; //配置需要代理的端口
location / {
proxy_pass http://localhost:8080; //新的指向
}
退出 :wq!
然后关闭nginx
在重新运行nginx
2.反向代理
(1)实现同一个端口访问,根据不同的路径跳转到指定的页面
*需要使用2个tomcat开启两个不同的服务器,一个tomcat为8080端口,一个tomcat为8081端口,分别指向不同的页面地址路径
配置:
loction 语法规则
语法规则: location [=|~|~*|^~] /uri/ {… }
描述:首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
=:= 开头表示精确匹配
^~:^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~:~ 开头表示区分大小写的正则匹配
~*:~* 开头表示不区分大小写的正则匹配
!~和!~*:!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
/:用户所使用的代理(一般为浏览器)
$http_x_forwarded_for:可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer:可以记录用户是从哪个链接访问过来的
nginx配置实例2
1.负载均衡
(1)通过浏览器的地址栏输入地址:http://192.168.17.16/edu/a.html,负载均衡效果,平均分配到8081端口中
准备工作
*准备2台tomcat服务器,一台8080,一台8081
*在2个tomcat服务器里面的webapps目录中都创建名为edu的文件夹,在edu文件夹中创建a.html用于测试
配置:
(1)在http模块创建:
upstream myserver {
server 127.0.0.1:8080 weight=5;//weight控制权重,例如这里5,那么他的承载量就是下面服务器的5倍
server 127.0.0.1:8081 weight=1;
}
(2)修改server模块的server_name为:
server_name 127.0.0.1; //主机地址
(3)然后在server模块中的location修改为:
location / {
root html;
index index.html index.htm;
proxy_pass http://myserver; //myserver和上面的服务器配置同名
}
分配策略:
1.轮询(默认)
每个请求按照时间顺序,逐一分配到服务器中,如果服务器down掉了,就会自动剔除
2.weight
默认代表权重1,权重越高分配的客户端就越多
upstream myserver {
server 127.0.0.1:8080 weight=5;//weight控制权重,例如这里5,那么他的承载量就是下面服务器的5倍
server 127.0.0.1:8081 weight=1;
}
3.ip_hash
每个请求,按访问ip的hash分配,这样每个客户端就固定访问一个服务器,可以解决session共享的问题
upstream myserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
4.fair(第三方)
按照后端服务器的响应时间进行分配,谁的响应时间短就分配给谁
upstream myserver {
fair;//需要下载安装配置fair模块才可以
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
nginx动静分离
1.什么是动静分离
将动态的资源和静态的资源分别放在不同的服务器上
准备工作
*在linux系统中准备些静态资源用于访问
我的资源分别是:root/data/img root/data/www
步骤:
(1)首先进入我们的nginx的conf配置文件中,添加location
location /img/ {
root /root/data/;
autoindex on; //这个属性是将文件以列表形式展示
}
location /www/ {
root /root/data/;
index index.html index.html;
}
然后重新启动nginx:./nginx -s reload
在浏览器中输入:ip地址/www/ 或者 ip地址/img/ 就可以查看到文件了
注意如果出现403 Forbidden需要在到我们的nginx.conf配置文件中在全局模块的位置添加:user root;
#user nobody;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
user root; //添加就可以了
events {
worker_connections 1024;
}