nginx主要使用的地方就是用来进行反向代理的http服务器,
主流的Web服务器有:
1、Apache,开源免费,具有简单、高速、性能稳定等特点,可作代理服务器使用;
2、Nginx,是一种高性能的HTTP和反向代理web服务器,支持高并发和负载均衡;
3、IIS,适用于windows系统,可用于监视配置和控制Internet服务;
4、Tomcat,是一个开放源代码,运行servlet和JSP Web应用软件并基于Java的Web应用软件容器,性能稳定,且免费。
笔者日常主要开发用到的是nginx和tomcat, 静态资源使用niginx处理, 动态资源交由tomcat处理.
tomcat的默认的连接数是100个,而nginx最大的连接数是50000个并发的连接数.
- nginx的优势:
-
高并发
-
热部署
-
反向代理,负载均衡,
-
处理静态资源
- nginx的安装
linux环境,执行一下指令即可
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y openssl openssl-devel
前置环境准备好了之后就可以开始正式的安装了, 将 nginx 压缩包拷贝至 linux 服务器,解压 nginx 压缩包。
第一步:解压并进入 nginx 安装目录
tar -zxvf nginx-1.12.2.tar.gz -C /opt/install
cd nginx-1.12.2 .
第二步:生成 makefile 文件
./configure --help 查询详细参数(参考本教程附录部分:nginx 编译参数)
参数设置如下:提示先创建该目录:mkdir -p /var/temp/nginx
./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
第三步:编译并安装
make install
第四步:复制 nginx 命令为全局命令
将 nginx 命令复制为全局命令之后,就可以在任意地方使用了。
cp /usr/local/nginx/sbin/nginx /usr/local/bin/
第五步:启动 nginx,并测试
cd /usr/local/nginx/sbin/
./nginx
看到此页面即表示安装成功
若是涉及防火墙的安装可以通过一下指令进行查看
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload .
nginx配置
我们所谓的nginx的配置其实都是指的是对nginx.conf文件的修改 nginx的文件的修改实际上就是这个配置文件,此文件分为三个部分:
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类 型以及配置文件的引入等。比如上面第一行配置的:worker_processes 1; 这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events 块
比如上面的配置:
events {
worker_connections 1024;
} .
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的 网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 worker_ process可以同时支持的最大连接数等。
上述例子就表示每个 worker_process 支持的最大连接数为 1024.这部分的配置对 Nginx 的性能影响较大,在 实际中应该灵活配置。
第三部分:http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这 里。需要注意的是:http 块也可以包括 http 全局块、server 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称
(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、
数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
... #全局块
event{ #events块
...
}
http{ #http块
server{ #server块
... #server全局块
location{ #location块
...
}
location{ #location块
...
}
}
server{ #server块
...
}
... #http全局块
}
上面就是关于nginx.conf文件的主要功能拨快的配置信息
下面讲一下如果使用:
#### 全局块 开始 ####
user nobody nobody; #配置允许运行nginx服务器的用户和用户组
worker_processes 3; #配置允许nginx进程生产的worker process数
error_log logs/error.log; #配置nginx服务器运行对错误日志存放路径
pid nginx.pid; #配置nginx服务器运行时的pid文件存放路径和名称
#### 全局块 结束 ####
#### events块 开始 ####
events
{
ues epoll; #配置事件驱动模型
worker_connections 1024; #配置最大连接数
}
#### events块 结束 ####
#### http块 开始 ####
http
{
include mime.types; #定义MIME-Type
default_type application/octet-stream;
sendfile on; #配置允许使用sendfile方式传输
keepalive_timeout 65; #配置连接超时时间
log_format access.log '$remote_addr-[$time_local]-"$request"-"$http_user_agent"'; #配置请求处理日志的格式
#### server块 开始 ####
##配置虚拟主机 myServerl
server
{
listen 8081; #配置监听端口和主机名称
server_name myServer1;
access_log /myweb/server1/logaccess.log;#配置请求处理日志存放路径
error_page 404 /404.html; #配置错误页面
location /server1/location1 { #配置处理/server1/location1 请求的location
root /myweb;
index index.svr1-loc1.htm;
}
location /server1/location2 { #配置处理/server1/location2 请求的location
root /myweb;
index index.svr1-loc2.htm;
}
}
server
{
listen 8082;
server_name 192.168.1.3;
access_log /myweb/server2/log/access.log;
error_log 404 /404.html; #对错误页面404.html 做了定向配置
location /server2/location1
{
root /myweb;
index index.svr2-loc1.htm;
}
location /svr2/loc2
{
alias /myweb/server2/location2; #对location的URL进行更改
index index.svr2-loc1.htm;
}
location = /404.html #配置错误页面转向
{
root /myweb/;
index 404.html;
}
}
#### server块 结束 ####
}
### http块 结束 ####
看到上面是不是还是稀里糊涂的, 哈哈哈 , 下面我通过几个配置nginx的案例跟大家讲一下具体的使用:
1:配置反向代理的实现
实现的效果是这样的: 服务端使用 nginx 反向代理,客户端访问 www.123.com ,nginx 将请求转发到服 务端的某个 tomcat 服务器上。
第一步:启动一个
tomcat
,浏览器地址栏输入
127.0.0.1:8080
,出现如下界面
第二步:通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1
这个host文件是具体的位置在C:\Windows\System32\drivers\etc 路径下, 这个路径有个hosts文件
在文件的最下面加上 ip www.123.com.( 如192.168.92.128 www.123.com. )
第三步:在
nginx.conf
配置文件中增加如下配置
如上配置:我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故
访问该域名时会跳转到 127.0.0.1:8080 路径上。重新加载 nginx 配置文件,然后在浏览器访
问 www.123.com,结果如下:
这就实现了反向代理了
下面讲讲负载均衡:
实现的效果如下:
具体配置
第一步:准备两个 Tomcat,并在每个 tomcat 下的 ROOT 目录下分别添加有区分的 a.html
第二步:在 nginx.conf 中进行配置
upstream myserver {
server 192.168.92.128:8080;
server 192.168.92.128:8081;
}
server {
listen
80;
server_name www.123.com;
#charset koi8-r;
#access_log
logs/host.access.log main;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
error_page
500 502 503 504 /50x.html;
location = /50x.html {
root
html;
}
}
第三步:在 windows 浏览器多次访问:
http://
www.123.com
/a.html
会发现区别
几种负载均衡策略
1
、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动
剔除。
2
、
weight
weight
代表权
,
重默认为
1,
权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决
session 的问题。例如:
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、其它参数
Nginx 动静分离
由于
nginx
擅长处理静态资源,而
tomcat
擅长处理动态资源,所以为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
第一步:在两个
tomcat
的
webapps
目录下的的
a.html
中添加
img
图片引用
在
8080
端口号的
tomcat
的
webapps
目录下的
ROOT
目录中的
index.jsp
中添加
:
<h1>主tomcat:8080</h1>
<img src="1.jpg"></img>
在
8081
端口号的
tomcat
的
webapps
目录下的
ROOT
目录中的
index.jsp
中添加
:
<h1>主tomcat:8081</h1>
<img src="1.jpg"></img>
第二步:在
nginx
的配置文件中配置:
location / {
proxy_pass http://myserver;
index
index.html index.htm;
}
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
root /usr/share/nginx/html;
}
location ~ \.(jsp|do|action)$ {
proxy_pass http://myserver;
}
第三步:在
/usr/share/nginx/html
目录中存放的
1.jpg
图片
第四步:在浏览器访问
:
http://www.123.com/
后面讲一下nginx集群搭建, 实际上生产环境都是nginx集群搭建, 防止单节点nginx宕机,导致所有请求都到达不了tomcat.
Nginx
集群有两种模式:一种是主从模式 一种是双主模式
第一种:keepalived+Nginx 高可用集群(主从模式)
前期准备
第一步:需要两台服务器并且安装好
nginx
这个自己装哈, 注意ip不要冲突了就行
vi /etc/sysconfig/network-scripts/ifcfg-ens33 去掉
UUID
修改 ip:
介于
3-254
之间,并且不能和其它虚拟机
ip
冲突
vi /etc/hostname 修改主机名
vi /etc/hosts 编辑主机名和
ip
的映射
重启
第二步:在两台
nginx
所在的虚拟机上安装
keepalived
yum install keepalived –y
安装之后,在
etc
里面生成目录
keepalived
,有文件
keepalived.conf
第三步:完成高可用配置
(
主从配置
)
(1)
修改
/etc/keepalived/keepalivec.conf
配置文件
(2)在/usr/local/src 中添加检测脚本
(3)
把两台服务器上
nginx
和 和
keepalived
先启动两台服务器上的
tomcat
(每个服务器有两个
tomcat,
共
4
个
tomcat
都启动)
启动
nginx:
./nginx
启动
keepalived: systemctl start keepalived.service
测试
(1)
查看虚拟
ip
是否绑定成功
(2)在浏览器地址栏输入虚拟 ip 地址 192.168.17.50,在浏览器可以看到 tomcat 网页,说明虚拟 ip 可用
测试停掉一台
把主服务器
(192.168.92.128)
的
nginx
和
keepalived
停掉
,
再在浏览器输入虚拟
ip
,应该也可以访问
systemctl stop keepalived #
先停掉
keepalived
./nginx -s stop
#再关闭
nginx
再次访问虚拟 ip
,发现还是可以访问的
第二种:keepalived+Nginx 高可用集群(双主模式)
主机配置
在
keepalived.conf
最后一行添加
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52 #新主备的路由
id:52
priority 70
#
和另一个从机中的优先级一致即可。
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.92.51
#新的虚拟
ip
}
}
备机配置
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.92.51
}
}
重启主备的 keepalived: systemctl restart keepalived
执行:
ip addr
主备各有一个
VIP
编辑主备服务器上的两个 tomcat(共 4 个 tomcat)
在主服务器
tomcat
上的端口号为
8080
的
index.jsp
设置显示:主
tomcat8080
在主服务器
tomcat
上的端口号为
8081
的
index.jsp
设置显示:主
tomcat8081
特别说明:在两台服务器的
nginx
的配置文件中只访问了主服务器上的两个
tomcat
,所以这里不需要配置从
服务器上的
tomcat
。