Nginx
是一款高性能的反向代理服务器,可以实现反向代理、负载均衡、动静分离等功能
Nginx在Linux下的安装
需要安装 gcc 的环境
yum install gcc-c++
第三方的开发包
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
上传Nginx文件
解压缩
tar -zxvf nginx-1.8.0.tar.gz
进入nginx-1.8.0目录 使用 configure 命令创建一 makeFile 文件。
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi
执行后可以看到Makefile文件
编译
make
安装
make install
注意:启动nginx 之前,上边将临时文件目录指定为/var/temp/nginx/client, 需要在/var 下创建此 目录
mkdir /var/temp/nginx/client -p
启动
cd /usr/local/nginx/sbin
./nginx
查看进程
ps aux|grep nginx
访问
默认为80端口,可以直接Localhost访问
地址栏输入虚拟机的IP即可访问(默认为80端口)
192.168.176.128
如果没有访问成功,有可能是因为防火墙没有关闭
centos7关闭防火墙:
systemctl stop firewalld
如果不想关闭防火墙,可以设置开放端口
firewall-cmd --add-port=8080/tcp --permanent
重启防火墙:
firewall-cmd -reload
查看开放的端口号:
firewall-cmd --list-all
关闭:
方式一(杀进程):
./nginx -s stop
方式二(退出):
./nginx -s quit
重启:
./nginx -s reload
查看版本
./nginx -v
Nginx配置文件
位置:/usr/local/nginx/conf/nginx.conf
配置文件有三部分组成
全局块
从配置文件开始到events间的区域
作用:主要设置一些影响nginx服务器整体运行的配置指令
worker_processes
:处理并发量的值,值越大处理并发量越多events块
作用:影响Nginx服务器与用户网络连接
worker_connections
:支持最大的连接数http块
配置最频繁的部分
包括http全局块、sever块
部署静态页面
作用:在nginx服务器中访问静态页面
将静态页面上传到nginx目录中
修改配置文件(conf/nginx.conf)
location / { root index; index index.html index.htm; } # root代表文件夹,index代表首页 #将root 改为index(自己的静态页面文件夹)
修改配置文件的方法:
由于在linux上大量修改配置文件使用vim命令会很繁琐,这里推荐一种vscode远程修改上传配置文件的方法。
配置虚拟主机
端口绑定
作用:输入不同端口号就可以进入不同页面
修改nginx配置文件
server { listen 81; #端口号 server_name localhost; #域名或者Ip location / { #访问路径配置 root index; #目录 index index.html index.htm; #默认首页 } error_page 500 502 503 504 /50x.html; #错误页面 location = /50x.html { root html; } } #复制两份server,就可以有两台虚拟主机 server { listen 82; #端口号 server_name localhost; #域名或者Ip location / { #访问路径配置 root regist; #目录 index regist.html regist.htm; #默认首页 } error_page 500 502 503 504 /50x.html; #错误页面 location = /50x.html { root html; } }
重启nginx
./nginx -s reload
访问页面
192.168.179.128:81
来到主页192.168.179.128:82
来到注册页面
域名绑定
作用:输入域名就可以进入页面
一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。
本地测试可以修改 hosts 文件(C:\Windows\System32\drivers\etc\host)
192.168.177.129 www.hmtravel.com
192.168.177.129 regist.hmtravel.com
修改nginx配置文件
server { listen 80; #这里全配置成80 server_name regist.hmtravel.com; #修改此处 location / { root regist; index regist.html regist.htm; } } server { listen 80; #这里全配置成80 server_name www.hmtravel.com; #修改此处 location / { root index; index index.html index.htm; } }
重启nginx
./nginx -s reload
访问页面
www.hmtravel.com
regist.hmtravel.com
Nginx反向代理
作用:网络和服务器之间加上nginx
反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器
正向代理是针对你的客户端,而反向代理是针对服务器的
反向代理的好处:
- 当服务器并发量变大时,搭建服务器集群,反向代理能将大并发量转移到反向代理服务器上,再由自己按照一定规则将请求发送给服务器
- 反向代理接收所有请求,反向代理服务器和服务器集群之间可以建立防火墙,从而提高安全性
应用一
效果:访问www.hmtravel.com或192.168.179.128:80,实际访问的是tomcat页面
修改nginx配置文件
upstream tomcat-travel{ server 192.168.179.128:8080; } server { listen 80; server_name www.hmtravel.com; location / { #root index; #注释掉 proxy_pass http://tomcat-travel; #代理上面的ip index index.html index.htm; }
重启nginx
./nginx -s reload
访问页面
输入
www.hmtravel.com
,效果看到tomcat页面流程:访问域名www.hmtravel.com,找到 proxy_pass代理tomcat-travel,tomcat-travel对应的服务器是192.168.179.128:8080,返回tomcat页面
应用二
效果:访问192.168.179.128:9001/edu/index.html和192.168.179.128:9001/dev/index.html访问的是不同的两个页面
修改nginx配置文件
server { listen 9001;#此处修改 server_name 192.168.179.128; #此处修改 location ~ /edu/ { # ~是正则表达式的意思,包含edu就跳转指定页面 proxy_pass http://127.0.0.1:8080; 跳转到指定tomcat } location ~ /dev/ { # ~是正则表达式的意思,包含edu就跳转指定页面 proxy_pass http://127.0.0.1:8081; 跳转到指定tomcat } }
location 后可以跟几种形式
= 表示uri必须和后面的保持一直才能访问,如: = /edu/a.html,则访问时必须是192.168.179.128:9001/edu/a.html
~ 表示正则表达式,包含即可,如:~ /edu/,则访问时
192.168.179.128:9001/edu/a.html,192.168.179.128:9001/edu/b.html均可访问
* 表示不区分大小写的正则表达式,如:* /edu/,则访问192.168.179.128:9001/EDU/a.html,192.168.179.128:9001/edu/b.html均可访问
重启nginx
./nginx -s reload
访问页面
192.168.179.128:9001/edu/index.html
192.168.179.128:9001/dev/index.html
Nginx负载均衡
负载均衡,其意思就是分摊到多个操作单元上进行执行
配置负载均衡-准备工作
- 将刚才的存放工程的tomcat复制三份,修改端口分别为8080 ,8081,8082
- 分别启动这三个tomcat服务
- 为了能够区分是访问哪个服务器的网站,可以在首页标题加上标记以便区分
配置负载均衡
效果:访问192.168.179.128:80,访问到8080,8081,8082的tomcat
修改 Nginx配置文件
#放在http块中 upstream tomcat-travel{ server 192.168.179.128:8080; server 192.168.179.128:8081; server 192.168.179.128:8082; }
修改server
server { listen 80; server_name 192.169.179.128; location / { proxy_pass http://tomcat-travel; #代理上面的ip index index.html index.htm; }
输入网址进行测试
观察标题,看看是否不同,经测试每台服务器出现的概率为33.3%
修改权重
想要让某台服务器分担更多的压力,可以分配其权重,默认为1
upstream tomcat-travel{ server 192.168.179.128:8080 weight=2; server 192.168.179.128:8081; server 192.168.179.128:8082; }
负载均衡策略
- 轮询:平均按顺序访问,当一个服务器down掉就会自动剔除
- 权重:在ip后设置权重
weight = 2
,按照权重比例进行访问 - ip hash:在upstream块中加上ip_hash 即可。根据访问用户的Ip计算哈希值,则该用户永远访问的就是该服务器,可以有效解决session问题。
- fair:在upsteam块中加上fair即可。根据用户访问服务器的响应时间,哪个服务器响应时间短就访问哪个服务器。
动静分离
简单来说就是把动态请求和静态请求分开,nginx处理静态页面。
效果:访问192.168.179.128:80/image/1.jpg,访问的就是静态资源服务器中的数据。访问192.168.179.128:80……其他的页面,是正常反向代理访问的动态数据
准备工作
将静态文件放到Linux服务器中,如/data/image/1.jpg
配置nginx服务器
#静态资源服务器 server { listen 80; server_name 192.169.179.128; location /image/ { root /data/ #index index.html index.htm; #autoindex on; #页面显示目录列表 } #动态资源服务器(正常的反向代理) server { listen 80; server_name 192.169.179.128; location / { proxy_pass http://127.0.0.1:8080; index index.html index.htm; }