我們上一節(jié)說(shuō)到只有一個(gè)nginx處事器,所以用戶會(huì)見(jiàn)處事器是顛末nginx的,由nginx按照URL法則指向用戶去會(huì)見(jiàn)誰(shuí)人處事器,同時(shí)我們也說(shuō)到,這樣的處事器設(shè)計(jì)的漏洞就是,當(dāng)改nginx高出了負(fù)載的壓力的時(shí)候,nginx就不在事情,這樣就導(dǎo)致用戶無(wú)法舉辦相應(yīng)的操縱了。為了使各人越發(fā)容易領(lǐng)略,我把圖片從頭畫(huà)了一下,如下圖
由上圖可以看到,用戶進(jìn)入顛末nginx,然后只要我們對(duì)nginx設(shè)置相應(yīng)的法則,讓它去轉(zhuǎn)發(fā)到差異的處事器。這里我們給出三個(gè)匹配法則來(lái)舉辦處理懲罰,假如url是包括有l(wèi)ogin的則會(huì)轉(zhuǎn)發(fā)到192.168.1.101可能是192.168.1.102這兩臺(tái)呆板,好比是雖然你假如只有一臺(tái)呆板的話,也可以填寫(xiě)一個(gè)IP地點(diǎn)。好比是碰著http://api.yeehot.com/login/api/qq,那么會(huì)按照權(quán)重,用戶會(huì)見(jiàn)到192.168.1.101可能192.168.1.102處事器。
相識(shí)了nginx的轉(zhuǎn)發(fā)法則之后我們應(yīng)該如何設(shè)置nginx,上一節(jié)我們已經(jīng)說(shuō)過(guò)如何安裝nginx了,在安裝后,我們可以對(duì)nginx舉辦設(shè)置,假如安裝我上一節(jié)的nginx版本以及安裝路徑的話,我們的設(shè)置文件會(huì)在/usr/nginx-1.10.0/conf/nginx.conf,必然要留意的是不是我們解壓的誰(shuí)人文件的設(shè)置文件,
我們可以輸入vi /usr/nginx-1.10.0/conf/nginx.conf,打開(kāi)nginx.conf,這里我為了可以讓各人利便閱讀,把Nginx的設(shè)置做了一個(gè)說(shuō)明,
#user nobody;
#歷程數(shù),界說(shuō)了nginx執(zhí)行時(shí)的歷程數(shù)
worker_processes 4;
#變動(dòng)worker歷程的最大打開(kāi)文件數(shù)限制
worker_rlimit_nofile 65535;
#錯(cuò)誤日志
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后端處事器設(shè)置,這里我利用默認(rèn)的輪詢請(qǐng)求方法------------------
#登岸后端處事器設(shè)置,設(shè)置法則是, ip:port,#weight,代表權(quán)重,權(quán)重越大,代表會(huì)見(jiàn)到改IP的處事器的幾率越大。
upstream loginserver {
server 192.168.1.101:8080 weight=50;
server 192.168.1.102:8080 weight=50;
}
#評(píng)論后端處事器設(shè)置
upstream commentserver {
server 192.168.1.103:8080 weight=50;
server 192.168.1.104:8080 weight=50;
}
#談天后端處事器設(shè)置
upstream chatserver {
server 192.168.1.105:8080 weight=50;
server 192.168.1.106:8080 weight=50;
}
#-----------------Nginx后端處事器設(shè)置竣事-------------------------------------------
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 {
#監(jiān)聽(tīng)的端口,80
listen 80;
#轉(zhuǎn)發(fā)的域名,按照這個(gè)域名來(lái)轉(zhuǎn)發(fā)下面的法則
server_name api.yeehot.com;
#字符集
charset utf-8;
#生存路徑
root /mnt/yeehot;
index index.html index.htm index.php;
#默認(rèn)的會(huì)見(jiàn)解點(diǎn)
location / {
index index.html index.htm;
}
#轉(zhuǎn)發(fā)法則,當(dāng)URL碰著login的時(shí)候,會(huì)轉(zhuǎn)發(fā)到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
#
#錯(cuò)誤頁(yè)面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
以上的設(shè)置,主要是后端處事器的設(shè)置,端口的監(jiān)聽(tīng),域名的設(shè)置,已經(jīng)url轉(zhuǎn)發(fā)法則的設(shè)置,設(shè)置好后,我們還需要重啟nginx,輸入指令,nginx -s reload
spring mvc+tomcat的設(shè)置
我們這里假設(shè)用戶已經(jīng)打包好了springmvc項(xiàng)目包,以及安裝好tomcat的環(huán)境下,由于spirng mvc包只是運(yùn)行在tomcat處事器下的,這樣我們只需要對(duì)我們的tomcat舉辦設(shè)置就可以了
我們打開(kāi)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" />
<--添加以下這一項(xiàng)代碼,docBase是項(xiàng)目標(biāo)路徑-->
<Context docBase="/Users/yeehot/Downloads/apache-tomcat-7.0.69/webapps/YeehotProgramKing" path="" debug="0" reloadable="false" />
</Host>
以上設(shè)置目標(biāo)就是將tomcat配置成默認(rèn)會(huì)見(jiàn)的目次,,好比是本來(lái)需要會(huì)見(jiàn)的地點(diǎn)是
http://api.yeehot.com:8080/YeehotProgramKing/login/api/qq
此刻只需要會(huì)見(jiàn)http://api.yeehot.com:8080/login/api/qq
由于我們方才設(shè)置nginx的時(shí)候設(shè)置后端處事器是如下的名目
upstream loginserver {
server 192.168.1.101:8080 weight=50;
server 192.168.1.102:8080 weight=50;
}