分布式部署方式有很多,最简单的就是直接用nginx进行LB,多机部署应用实例。
本文简单说明整个步骤。(本文以在同一台服务器上部署两个应用为例进行介绍,如果是多台服务器,部署配置方式都是类似的,考虑到域名问题,可以借助虚IP和keepalive来实现动态漂移)
1、安装nginx
在centos下安装nginx最简单的方式当然是直接使用yum install安装,但是存在的问题就是nginx的一些扩展模块都没有。所以建议还是下载源码,然后手动build。
首先,需要安装nginx build过程中的一些依赖。
yum -y install zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
注意:安装过程中,有可能提示依赖包的版本不正确,可以考虑upgrade升级或者downgrade降级对应的依赖包的版本,然后再进行安装。
另外,最好检查一下yum的repo配置源的版本是否正确,比如检查:/etc/yum.repos.d/CentOS-Base.repo文件,看看里面的URL路径里面的OS版本是否与系统的CentOS版本一致。(如果出现不少版本不一致的错误提示,大概率是repo源配置问题)
然后下载nginx到指定目录(本示例使用的是1.20.2版本,1.21版本解压后的目录结构可能有变化)并解压。
进入解压后的目录,执行configure命令:
./configure --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-pcre-jit
上面的这些参数是推荐安装的一些扩展模块,如果后续需要新增加模块,则需要重新进行编译nginx。
(说明:重编译过程中,为了保持之前的配置不变,建议参考下文进行操作)
https://www.cnblogs.com/byeyear/p/11908586.html
(说明2:如果命令执行过程中报错,可能是缺少一些依赖,按照提示进行处理即可)
然后执行命令:
make & make install
如果过程中没有报错,则安装完成。然后可以执行命令查看版本信息:
/usr/local/nginx/sbin/nginx -V
(该命令也可以查看出build过程中使用的参数)
2、对nginx进行配置
具体的nginx配置说明不再赘述,网上很多资料,这里给出简单的示例:
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
map $uri $loggable{
default 1;
~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$) 0;
}
log_format myFormat '$remote_addr [$time_local] <$upstream_addr $request_time $upstream_response_time> $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
access_log logs/access.log myFormat if=$loggable;
sendfile on;
keepalive_timeout 65;
gzip on;
upstream myapps {
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myapps;
#proxy_redirect off;
#proxy_set_header Host $host:$server_port;
}
}
}
说明:对于nginx的access日志,很多无用的(比如js、css等文件的访问)日志可以过滤掉(借助map,参考:https://www.jianshu.com/p/9861cd199878)
说明:日志的内容、格式,可以通过log_format来配置,参考:
https://www.cnblogs.com/kevingrace/p/5893499.html
3、注意事项
首先,通过nginx进行分布式应用部署前,需要先完成共享session的改造(见另一篇文章)
然后,需要注意如果使用了CAS,对于认证后跳转的url,需要指定为访问nginx的url,而不是后端某个server的地址。