我们上一节说到只有一个nginx服务器,所以用户访问服务器是经过nginx的,由nginx根据URL规则指向用户去访问那个服务器,同时我们也说到,这样的服务器设计的弊端就是,当改nginx超过了负载的压力的时候,nginx就不在工作,这样就导致用户无法进行相应的操作了。为了使大家更加容易理解,我把图片重新画了一下,如下图
由上图可以看到,用户进入经过nginx,然后只要我们对nginx配置相应的规则,让它去转发到不同的服务器。这里我们给出三个匹配规则来进行处理,如果url是包含有login的则会转发到192.168.1.101或者是192.168.1.102这两台机器,比如是当然你如果只有一台机器的话,也可以填写一个IP地址。比如是遇到http://api.yeehot.com/login/api/qq,那么会根据权重,用户访问到192.168.1.101或者192.168.1.102服务器。
了解了nginx的转发规则之后我们应该如何配置nginx,上一节我们已经说过如何安装nginx了,在安装后,我们可以对nginx进行配置,如果安装我上一节的nginx版本以及安装路径的话,我们的配置文件会在/usr/nginx-1.10.0/conf/nginx.conf,一定要注意的是不是我们解压的那个文件的配置文件,
我们可以输入vi /usr/nginx-1.10.0/conf/nginx.conf,打开nginx.conf,这里我为了可以让大家方便阅读,把Nginx的配置做了一个说明,
#user nobody;
#进程数,定义了nginx执行时的进程数
worker_processes 4;
#更改worker进程的最大打开文件数限制
worker_rlimit_nofile 65535;
#错误日志
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
# nginx连接的设置。
events {
use epoll;
worker_connections 65535;
}
http {
#------------------Nginx后端服务器配置,这里我使用默认的轮询请求方式------------------
#登陆后端服务器配置,配置规则是, ip:port,#weight,代表权重,权重越大,代表访问到改IP的服务器的几率越大。
upstream loginserver {
server 192.168.1.101:8080 weight=50;
server 192.168.1.102:8080 weight=50;
}
#评论后端服务器配置
upstream commentserver {
server 192.168.1.103:8080 weight=50;
server 192.168.1.104:8080 weight=50;
}
#聊天后端服务器配置
upstream chatserver {
server 192.168.1.105:8080 weight=50;
server 192.168.1.106:8080 weight=50;
}
#-----------------Nginx后端服务器配置结束-------------------------------------------
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 {
#监听的端口,80
listen 80;
server_name api.yeehot.com;
#字符集
charset utf-8;
#保存路径
root /mnt/yeehot;
index index.html index.htm index.php;
#默认的访问地址
location / {
index index.html index.htm;
}
#转发规则,当URL遇到login的时候,会转发到loginserver
location /login {
proxy_pass http://loginserver;
}
location /comment {
proxy_pass http://commentserver;
}
location /chat {
proxy_pass http://chatserver;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
以上的配置,主要是后端服务器的配置,端口的监听,域名的配置,已经url转发规则的配置,配置好后,我们还需要重启nginx,输入指令,nginx -s reload
spring mvc+tomcat的配置
我们这里假设用户已经打包好了springmvc项目包,以及安装好tomcat的情况下,由于spirng mvc包只是运行在tomcat服务器下的,这样我们只需要对我们的tomcat进行配置就可以了
我们打开tomcat的conf/server.xml,找到Host name="localhost" appBase="webapps",这一段代码,并且修改成如下的
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<--添加以下这一项代码,docBase是项目的路径-->
<Context docBase="/Users/yeehot/Downloads/apache-tomcat-7.0.69/webapps/YeehotProgramKing" path="" debug="0" reloadable="false" />
</Host>
以上配置目的就是将tomcat设置成默认访问的目录,比如是原来需要访问的地址是
http://api.yeehot.com:8080/YeehotProgramKing/login/api/qq
现在只需要访问http://api.yeehot.com:8080/login/api/qq
由于我们刚刚配置nginx的时候配置后端服务器是如下的格式
upstream loginserver {
server 192.168.1.101:8080 weight=50;
server 192.168.1.102:8080 weight=50;
}
这个说明我们访问到该IP的机器的时候监听到的是8080端口,而tomcat也是使用8080端口,而我们Nginx监听的是api.yeehot.com:80端口,这样nginx的工作就是我们访问api.yeehot.com:80/login/api/qq的时候,nginx会根据我们的“login”的规则,转发到loginserver这里,然后会根据192.168.1.101和192.168.1.102的权重分配到其中一台机器,并转向到该机器的8080端口,由于我们刚刚已经配置默认的访问路径,那么我们就可以访问到该springmvc的项目了。