日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
nginx+keepalived:局域网内网和公网外网 搭建nginx HA 双机热备 高可用
nginx 自动解压gzip压缩数据的两种方式:nginx自动解压、后台java程序解压
nginx安装、nginx反向代理/负载均衡、Lua、LuaJIT、openresty、lua-nginx-module、ngx_devel_kit 的安装
nginx 配置获取GET请求参数、POST请求参数、nginx配置开启跨域访问、nginx+keepalived配置主备切换/双机热备、nginx优化配置
下载连接:
nginx:http://nginx.org/en/download.html
http://nginx.org/download/
lua-nginx模块安装文件:https://github.com/openresty/lua-nginx-module/tags
lua-zlib模块安装文件: https://github.com/brimworks/lua-zlib/releases
nginx-devel-kit安装文件:https://github.com/simpl/ngx_devel_kit/tags
zlib:http://www.zlib.net/fossils/
lua:http://www.lua.org/ftp/
==========================================
yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel gcc gcc-c++ lua-devel
yum install pcre pcre-devel zlib zlib-devel openssl openssl--devel
命令安装:yum install pcre
比如我的是安装的:Package pcre-8.32-17.el7.x86_64 already installed and latest version
安装包安装:
pcre的根目录汇总:./configure && make && make install
==========================================
lua-5.3.5
tar -zxvf lua-5.3.5.tar.gz
cd /root/lua
vim Makefile 把 INSTALL_TOP= /usr/local/ 修改为 INSTALL_TOP=/usr/local/lua
make linux
make test
make install
rm -rf /usr/bin/lua 预先删除已经存在的lua
ln -s /usr/local/lua/bin/lua /usr/bin/lua
ln -s /usr/local/lua/share/lua /usr/share/lua
把 /usr/share/lua 目录中的 空的5.1文件夹 删除
/etc/profile环境变量配置
vim /etc/profile
export LUA_HOME=/usr/local/lua
export PATH=$PATH:$LUA_HOME/bin
source /etc/profile 环境变量生效
lua -v 查看版本号
创建一个 HelloWorld.lua 文件
代码如下 print("Hello World!")
执行以下命令 lua HelloWorld.lua
输出结果为 Hello World!
lua shell:
lua
print("Hello World!")
========================================================
centos 都自带 zlib,命令安装是:yum install zlib zlib-devel
执行 rpm -qa | grep zlib 查看到
zlib-devel-1.2.7-18.el7.x86_64
zlib-1.2.7-18.el7.x86_64
如果没有安装 zlib 可以直接下载安装,但是如果已经自带的话,可以选择卸载自带的zlib
比如在重新编译LNMP,发现linux中很多软件对zlib依存都比较大,但是系统中安装的版本都比较低,如果用yum直接升级的话,安装nginx时候没法指定zlib的目录,所以要编译安装zlib。
编译的话,如果能把系统中已经安装的版本替换掉,这样才是最好的。但是由于在编译过程中,很多工具都对zlib有依存,所以掌握顺序非常必要。
1.tar -zxvf zlib-1.2.9.tar.gz -C /usr/local/src
2.查看一下zlib安装文件 rpm -ql zlib 可以看到libz.so*库文件在/lib64/目录下
[root@node2 ~]# rpm -ql zlib
/usr/lib64/libz.so.1
/usr/lib64/libz.so.1.2.7
/usr/share/doc/zlib-1.2.7
/usr/share/doc/zlib-1.2.7/ChangeLog
/usr/share/doc/zlib-1.2.7/FAQ
/usr/share/doc/zlib-1.2.7/README
3.cd /usr/local/src/zlib
./configure --prefix=/usr/local/zlib --libdir=/lib64/
可以直接加上 --libdir=/lib64/ 直接指定库文件安装位置
4.编译:make
make check
5.卸载自带zli
掌握这个顺序很有必要,如果卸载早了的话,上一步就会提示失败
卸载指令 rpm -e --nodeps zlib,卸载完成之后,发现/lib64/目录下,zlib的库文件 libz.so*没有了
[root@node2 ~]# rpm -ql zlib
rpm: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
6.cd /usr/local/src/zlib
make install 安装zlib,安装完成之后,发现/lib64/目录下,有了zlib的库文件
[root@node2 lib64]# ll libz.so*
lrwxrwxrwx 1 root root 13 Apr 24 18:00 libz.so -> libz.so.1.2.9
lrwxrwxrwx 1 root root 13 Apr 24 18:00 libz.so.1 -> libz.so.1.2.9
-rwxr-xr-x 1 root root 117592 Apr 24 18:00 libz.so.1.2.9
如果zlib安装的是其他版本的话,那么可能会出现 用make install安装zlib,安装完成之后,可以看到/usr/local/zlib/目录下有个lib目录,里面存放的就是zlib的库文件
vim /etc/ld.so.conf,在下面加入一行/usr/local/zlib/lib/,然后保存退出。用ldconfig重新更新一下cache,这时候再用yum等工具,发现运行正常了,至此,zlib就更新成功。
7.ldconfig 刷新下动态链接库
vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
8.这时候再用yum install命令,发现运行正常
========================================================
LuaJIT
是一个利用JIT编译技术把Lua脚本直接编译成机器码由CPU运行
版本:2.0 与 2.1。当前稳定版本为 2.0。
2.1为版本与ngx_lua将有较大性能提升,主要是CloudFlare公司对luajit的捐赠。
FFI库 是LuaJIT中最重要的一个扩展库。
1.它允许从纯Lua代码调用外部C函数,使用C数据结构;
2.就不用再像Lua标准math库一样,编写Lua扩展库;
3.把开发者从开发Lua扩展C库(语言/功能绑定库)的繁重工作中释放出来;
下载LuaJIT:http://luajit.org/download.html
tar -zxvf LuaJIT-2.0.5.tar.gz
方式一:
cd /root/LuaJIT
make install PREFIX=/root/softs/luajit
echo "/root/softs/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig 刷新下动态链接库
/etc/profile环境变量配置
vim /etc/profile
export LUAJIT_LIB=/root/softs/luajit/lib
export LUAJIT_INC=/root/softs/luajit/include/luajit-2.0
source /etc/profile
方式二:
cd /root/LuaJIT
make PREFIX=/usr/local/luajit
make install PREFIX=/usr/local/luajit
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig 刷新下动态链接库
/etc/profile环境变量配置
vim /etc/profile
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
source /etc/profile
创建文件 hello.lua:代码 print("Hello World")
执行lua hello.lua
Lua shell运行:
lua
print("Hello World")
========================================================
openresty-1.13.6.2.tar.gz
下载:https://openresty.org/cn/download.html
安装:http://openresty.org/cn/installation.html
tar -xzvf openresty-1.13.6.2.tar.gz
方式一:
cd /root/openresty
./configure --prefix=/root/softs/openresty
make
sudo make install
方式二:
cd /root/openresty
./configure --prefix=/usr/local/openresty
make
make install
========================================================
单独 nginx 安装
cd /root/nginx
./configure --prefix=/usr/local/nginx
make
make install
========================================================
同时编译安装 nginx 1.8.1、ngx_devel_kit v0.3.1rc1、lua-nginx-module v0.10.14
方式一:
tar -xzvf nginx-1.8.1.tar.gz
tar -xzvf lua-nginx-module-0.10.14.tar.gz
tar -xzvf ngx_devel_kit-0.3.1rc1.tar.gz
cd /root/nginx
./configure --prefix=/root/softs/nginx --add-module=/root/lua-nginx-module --add-module=/root/ngx_devel_kit
make
make install
可以直接用 ldd 命令验证是否链了 libluajit-5.1 这样的 .so 文件,例如:
cd /root/softs/nginx/sbin
ldd nginx | grep lua 得出 libluajit-5.1.so.2 => /root/softs/luajit/lib/libluajit-5.1.so.2 (0x00007fd25016c000)
方式二:
tar -xzvf nginx-1.8.1.tar.gz -C /root
tar -xzvf lua-nginx-module-0.10.14.tar.gz -C /usr/local
tar -xzvf ngx_devel_kit-0.3.1rc1.tar.gz -C /usr/local
cd /root/nginx
./configure --prefix=/usr/local/nginx --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module
make
make install
可以直接用 ldd 命令验证是否链了 libluajit-5.1 这样的 .so 文件,例如:
cd /usr/local/nginx/sbin
ldd nginx | grep lua 得出 libluajit-5.1.so.2 => /usr/local/luajit/lib/libluajit-5.1.so.2 (0x00007f4691db7000)
========================================================
cd /root/softs/nginx/sbin
./nginx
启动时报错:./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决:ln -s /root/softs/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
ps aux|grep nginx
kill -9 xxx
浏览器:IP 默认80端口(可以不输入80端口) 显示 Welcome to nginx! 表示正常
问题:页面出现 403 Forbidden
分析:查看 /root/softs/nginx/logs/error.log 文件得知 Permission denied
ps aux | grep nginx 发现启动的用户为 nobody
root 113593 0.0 0.0 33064 872 ? Ss 15:30 0:00 nginx: master process ./nginx
nobody 113594 0.0 0.0 33492 1868 ? S 15:30 0:00 nginx: worker process
解决:
将nginx.config的user改为和启动用户一致
vim /root/softs/nginx/conf/nginx.conf
将 #user nobody 改为 user root
问题:nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
分析:当使用非root用户下操作nginx的话,因为Linux只有root用户可以使用1024以下的端口,因此应修改nginx.conf的默认80端口为1024以上的端口号
解决:
vim /home/gzp/softs/nginx/conf/nginx.conf
server
{
listen 2000;
}
========================================================
cd /root/softs/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
浏览器:IP 默认80端口(可以不输入80端口) 显示 Welcome to nginx! 表示正常
curl http://www.baidu.com
curl http://192.168.88.102:80
vim /root/softs/nginx/conf/nginx.conf
server {
location = /test
{
content_by_lua '
ngx.say("Hello World")
ngx.log(ngx.ERR, "err err err")
'
;
}
}
注意:上面最后结尾的 ' 和 ; 两个符号之间 必须换行
curl http://192.168.88.102:80/test 得出 Hello World
ngx.say 是 lua 显露給模块的接口。类似的有 ngx.log(ngx.DEBUG, “”),可以在error.log输出调试信息。
vim /root/softs/nginx/conf/nginx.conf
server {
location = /lua-version
{
content_by_lua '
if jit then
ngx.say(jit.version)
else
ngx.say(_VERSION)
end
'
;
}
}
注意:上面最后结尾的 ' 和 ; 两个符号之间 必须换行
curl http://192.168.88.102:80/lua-version 得出 LuaJIT 2.0.5
如果使用的是标准 Lua,访问 192.168.88.102:80/lua-version 应当返回响应体 Lua 5.1
如果是 LuaJIT 则应当返回类似 LuaJIT 2.0.5 这样的输出。不要使用标准 Lua,应当使用 LuaJIT, 后者的效率比前者高多了。
vim /root/softs/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test2
{
content_by_lua_file /root/hello.lua;;
}
}
文件hello.lua内容如下:ngx.say("Hello World")
这里的脚本可以任意复杂,也可以使用Lua 自己的库
curl http://192.168.88.102:80/test2 得出 Hello World
========================================================
安装cmake编译器
yum install -y gcc gcc-c++ make automake
cmake下载:https://cmake.org/files
wget http://www.cmake.org/files/v2.8/cmake-版本号.tar.gz
tar -zxvf cmake-版本号.tar.gz
例如:tar -zxvf cmake-3.14.3.tar.gz
cd /root/cmake
./bootstrap
gmake
gmake install
检查cmake安装:cmake --version
显示 cmake version 3.14.3 表示安装成功
========================================================
方式一:
tar -xzvf lua-zlib-1.2.tar.gz
cd /root/lua-zlib
cmake -DLUA_INCLUDE_DIR=/root/softs/openresty/luajit/include/luajit-2.1
make
cp zlib.so /usr/local/lib
cp zlib.so /root/softs/openresty/lualib
方式二:
tar -xzvf lua-zlib-1.2.tar.gz
cd /root/lua-zlib
cmake -DLUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1
make
cp zlib.so /usr/local/lib
cp zlib.so /usr/local/openresty/lualib
========================================================
方式一:
cd /root/softs/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
vim /root/softs/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test3
{
content_by_lua_file /root/a.lua;
}
}
方式二:
cd /usr/local/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
vim /usr/local/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test3
{
content_by_lua_file /root/a.lua;
}
}
curl http://192.168.88.101:80/test3 得出
cd /usr/local/nginx/logs 目录中 可以查看日志文件 access.log、error.log
报错:查看 /usr/local/nginx/logs/error.log 文件得知 cannot open /root/a.lua: Permission denied
ps aux | grep nginx 发现启动的用户为 nobody
root 113593 0.0 0.0 33064 872 ? Ss 15:30 0:00 nginx: master process ./nginx
nobody 113594 0.0 0.0 33492 1868 ? S 15:30 0:00 nginx: worker process
解决:
vim /usr/local/nginx/conf/nginx.conf
把 #user nobody; 修改为 user root;
a.lua
local zip = require 'zlib'
local uncompress = zip.inflate()
local compress = zip.deflate()
local deflated, eof, bytes_in,bytes_out =compress("asdasdasdasdasdasdasdasdasd", 'finish')
print(deflated, eof, bytes_in,bytes_out)
local uss,ret,getin,getout=uncompress(deflated)print(uss,ret,getin,getout)
print(uss,ret,getin,getout)
这里的脚本可以任意复杂,也可以使用Lua 自己的库b.lua:
local zip = require 'zlib'
local uncompress = zip.inflate()
local compress = zip.deflate()
local deflated, eof, bytes_in,bytes_out =compress("asdasdasdasdasdasdasdasdasd", 'finish')
print(deflated, eof, bytes_in,bytes_out)
local uss,ret,getin,getout=uncompress(deflated)print(uss,ret,getin,getout)
print(uss,ret,getin,getout)
Nginx
1.环境准备:
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2.Nginx安装:
1.tar zxvf nginx-1.8.0.tar.gz
2.进入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
3.一次性执行完上面的语句后可以在nginx-1.8.0目录下 看到Makefile文件
4.编译:make
5.安装:make install
3.Makefile是一种配置文件:
Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,
哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,
因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
4.configure参数:
./configure \
--prefix=/usr \ 指向安装目录
--sbin-path=/usr/sbin/nginx \ 指向(执行)程序文件(nginx)
--conf-path=/etc/nginx/nginx.conf \ 指向配置文件
--error-log-path=/var/log/nginx/error.log \ 指向log
--http-log-path=/var/log/nginx/access.log \ 指向http-log
--pid-path=/var/run/nginx/nginx.pid \ 指向pid
--lock-path=/var/lock/nginx.lock \ (安装文件锁定,防止安装文件被别人利用,或自己误操作。)
--user=nginx \
--group=nginx \
--with-http_ssl_module \ 启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
--with-http_flv_module \ 启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)
--with-http_stub_status_module \ 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
--with-http_gzip_static_module \ 启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
--http-client-body-temp-path=/var/tmp/nginx/client \ 设定http客户端请求临时文件路径
--http-proxy-temp-path=/var/tmp/nginx/proxy \ 设定http代理临时文件路径
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \ 设定http fastcgi临时文件路径
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 设定http uwsgi临时文件路径
--http-scgi-temp-path=/var/tmp/nginx/scgi \ 设定http scgi临时文件路径
--with-pcre 启用pcre库
5.Nginx启动与访问:
注意:在 /usr/local/nginx/sbin 目录下执行以下命令
启动 Nginx:./nginx
关闭 nginx:./nginx -s stop 或者 ./nginx -s quit
重启 nginx:./nginx -s reload
1.启动nginx 之前,上边将临时文件目录指定为/var/temp/nginx/client, 需要在/var 下创建此目录
mkdir /var/temp/nginx/client -p
2.进入到Nginx目录下的sbin目录
cd /usr/local/nginx/sbin
3.启动Nginx:./nginx
修改完nginx.conf配置文件后都要重启:./nginx -s reload
4.启动后查看进程
ps aux|grep nginx
5.地址栏输入虚拟机的IP即可访问(默认为80端口)
192.168.25.133/index.html 或 http://192.168.25.133 实际访问的是/usr/local/nginx/html/目录下的index.html
IP后面不写“:端口”的话,默认访问的是80端口,而nginx.conf中配置的所监听的端口也是80端口。
6.Nginx部署“静态化”网页:
把“静态化”网页都放到 /usr/local/nginx/html/目录下。
比如把 \pinyougou-page-web\src\main\webapp下的静态化的“商品详情页”文件 放到 /usr/local/nginx/html/目录下,
浏览器访问:192.168.25.133/静态化的“商品详情页”文件名.html
IP后面不写“:端口”的话,默认访问的是80端口,而nginx.conf中配置的所监听的端口也是80端口。
7.nginx配置虚拟主机;
1.端口绑定:
修改 /usr/local/nginx/conf/nginx.conf下的配置信息如下,
表示所监听的端口对应的是指定文件夹中的静态化网页文件名.html,
浏览器访问“nginx所在虚拟机IP:所监听端口” 即能显示指定文件夹中的静态化网页文件名.html
server
{
listen 81; //所监听的端口
server_name localhost;
location /
{
root 文件夹名;//“静态化网页文件名.html”所在“/usr/local/nginx目录下的”文件夹名
index 静态化网页文件名.html;//“usr/local/nginx/文件夹名”目录下的 “静态化网页文件名.html”
}
}
server
{
listen 82;//所监听的端口
server_name localhost;
location /
{
root 文件夹名;//“静态化网页文件名.html”所在“/usr/local/nginx目录下的”文件夹名
index 静态化网页文件名.html;//“usr/local/nginx/文件夹名”目录下的 “静态化网页文件名.html”
}
}
2.端口绑定的例子:
1.在/usr/local/nginx/目录下 创建 cart 和 search 文件夹:
1.将前端静态页cart.html 以及图片样式等资源 上传至 /usr/local/nginx/cart 下
2.将前端静态页search.html 以及图片样式等资源 上传至 /usr/local/nginx/search 下
2.修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
把端口绑定到对应的静态化的html文件
81端口绑定到 /usr/local/nginx/cart下的cart.html
82端口绑定到 /usr/local/nginx/search下的search.html
3.修改完nginx.conf配置文件后都要重启:在 /usr/local/nginx/sbin 目录下执行 ./nginx -s reload
http://192.168.25.133:81/ (默认80端口)访问的是 /usr/local/nginx/cart下的cart.html
http://192.168.25.133:82/ (默认80端口)访问的是 /usr/local/nginx/search下的search.html
2.域名与IP绑定:
1.一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定,但一个域名不能绑定多个IP。
本地测试可以修改 hosts 文件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走dns 服务器。
多个域名共用同一个80端口。80端口本身就可以省略,无需在IP后面显式写出,即IP地址的访问 默认访问就是 80端口
2.修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
server
{
listen 80;
server_name 域名;
location /
{
root 文件夹名;//“静态化网页文件名.html”所在“/usr/local/nginx目录下的”文件夹名
index 静态化网页文件名.html;//“usr/local/nginx/文件夹名”目录下的 “静态化网页文件名.html”
}
}
server
{
listen 80;
server_name 域名;
location /
{
root 文件夹名;//“静态化网页文件名.html”所在“/usr/local/nginx目录下的”文件夹名
index 静态化网页文件名.html;//“usr/local/nginx/文件夹名”目录下的 “静态化网页文件名.html”
}
}
3.例子:
1.C:\Windows\System32\drivers\etc 添加以下信息:
192.168.25.133 cart.pinyougou.com
192.168.25.133 search.pinyougou.com
192.168.25.133 www.pinyougou.com
2.修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
3.修改完nginx.conf配置文件后都要重启:在 /usr/local/nginx/sbin 目录下执行 ./nginx -s reload
cart.pinyougou.com 访问的是 /usr/local/nginx/cart下的cart.html
search.pinyougou.com 访问的是 /usr/local/nginx/search下的search.html
8.nginx反向代理
nginx 反向代理+负载均衡 到 一个/多个 tomcat 或 另外一个/多个 nginx:
1.nginx反向代理到 tomcat:nginx把接收到的请求发送给tomcat,由tomcat来处理该请求
upstream中配置一个以上的 tomcat的IP:端口的话,则为nginx的负载均衡。
修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
以下为nginx的 反向代理 + 负载均衡 的配置:
upstream tomcat-all
{
server tomcat所在的虚拟机IP:端口;
server tomcat所在的虚拟机IP:端口;
}
server
{
listen 80;
server_name 域名;
location /
{
proxy_pass http://tomcat-all;
index index.html;
}
}
2.nginx反向代理到 另外一个nginx:nginx把接收到的请求发送给 另外一个nginx,由另外一个nginx把该请求 发送给某个tomcat。
upstream中配置一个以上的 nginx的IP:端口的话,则为nginx的负载均衡。
修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
upstream nginx-all
{
server nginx所在的虚拟机IP:端口;
server nginx所在的虚拟机IP:端口;
}
server
{
listen 80;
server_name 域名;
location /
{
proxy_pass http://nginx-all;
index index.html;
}
}
1.反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,
并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
正向代理是针对客户端,而反向代理是针对服务器。
2.nginx反向代理到 tomcat:
nginx反向代理到 tomcat:nginx把接收到的请求发送给tomcat,由tomcat来处理该请求。
upstream中配置多个tomcat的IP:端口的话,则为nginx的负载均衡。
修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
以下为nginx的 反向代理 + 负载均衡 的配置:
upstream tomcat-all
{
server tomcat所在的虚拟机IP:端口;
server tomcat所在的虚拟机IP:端口;
}
server
{
listen 80;
server_name 域名;
location /
{
proxy_pass http://tomcat-all;
index index.html;
}
}
1.把一个 tomcat解压到 /usr/local/tomcat-cluster/下 ;
把 /usr/local/tomcat-cluster/apache-tomcat-1/webapps/ROOT/中原本的文件清空,把以下文件拷贝到ROOT/目录下。
2.C:\Windows\System32\drivers\etc 添加以下信息:
192.168.25.133 www.pinyougou.com
3. /usr/local/tomcat-cluster/apache-tomcat-1/conf/web.xml 中配置有以下默认欢迎页:
表示访问根路径时,实际默认访问的是以下配置好的欢迎页
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
4.因为后面的还会使用多个tomcat组成一起进行负载均衡,所以先修改此处先修改一下当前的
/usr/local/tomcat-cluster/apache-tomcat-1/conf/server.xml:
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
5.启动Tomcat:
cd /usr/local/tomcat-cluster/apache-tomcat-1/bin/
./startup.sh
6.修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
6.修改完nginx.conf配置文件后都要重启:在 /usr/local/nginx/sbin 目录下执行 ./nginx -s reload
www.pinyougou.com 映射到 192.168.25.133地址的虚拟机上的nginx,
然后nginx根据浏览器访问的域名“www.pinyougou.com”匹配到“server_name”中的“www.pinyougou.com”,
继而根据 http://tomcat-portal 映射到 upstream tomcat-portal中的 tomcat的IP“192.168.25.133:8180”
7.浏览器访问“www.pinyougou.com”,跳转访问到“192.168.25.133:8180”的/webapps/ROOT/目录下的index.html
3.nginx 反向代理+负载均衡 到 多个 tomcat:
nginx反向代理到 tomcat:nginx把接收到的请求发送给tomcat,由tomcat来处理该请求。
upstream中配置多个tomcat的IP:端口的话,则为nginx的负载均衡。
修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
以下为nginx的 反向代理 + 负载均衡 的配置:
upstream tomcat-all
{
server tomcat所在的虚拟机IP:端口;
server tomcat所在的虚拟机IP:端口;
}
server
{
listen 80;
server_name 域名;
location /
{
proxy_pass http://tomcat-all;
index index.html;
}
}
1./usr/local/tomcat-cluster/ 目录下已拷贝有3个Tomcat:apache-tomcat-1、apache-tomcat-2、apache-tomcat-3
3个Tomcat的 webapps/ROOT/目录下都为如下:
2.修改每个tomcat下的端口:
1./usr/local/tomcat-cluster/apache-tomcat-1/conf/server.xml:
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
2./usr/local/tomcat-cluster/apache-tomcat-2/conf/server.xml:
<Server port="8205" shutdown="SHUTDOWN">
<Connector port="8280" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />
3./usr/local/tomcat-cluster/apache-tomcat-3/conf/server.xml:
<Server port="8305" shutdown="SHUTDOWN">
<Connector port="8380" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" />
3.启动Tomcat:
cd /usr/local/tomcat-cluster/apache-tomcat-1/bin/
./startup.sh
cd /usr/local/tomcat-cluster/apache-tomcat-2/bin/
./startup.sh
cd /usr/local/tomcat-cluster/apache-tomcat-3/bin/
./startup.sh
4.修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
给某台tomcat设置权重:则访问该台“设置了权重的”tomcat的频率 会是访问“没有设置权重的tomcat的”频率的好几倍。
比如:server tomcat的IP:端口 weight=2; 表示访问“当前设置了权重的tomcat的”次数是“访问没有设置权重的tomcat的次数的”2倍
upstream tomcat-portal
{
server 192.168.25.133:8180;
server 192.168.25.133:8280;
server 192.168.25.133:8380;
}
server
{
listen 80;
server_name www.pinyougou.com;
location /
{
proxy_pass http://tomcat-portal;
index index.html;
}
}
5.修改完nginx.conf配置文件后都要重启:在 /usr/local/nginx/sbin 目录下执行 ./nginx -s reload
www.pinyougou.com 映射到 192.168.25.133地址的虚拟机上的nginx,
然后nginx根据浏览器访问的域名“www.pinyougou.com”匹配到“server_name”中的“www.pinyougou.com”,
继而根据 http://tomcat-portal 映射到 upstream tomcat-portal中,并随机访问多个tomcat中的其中一个tomcat。
6.浏览器访问“www.pinyougou.com”,随机跳转访问到其中一个tomcat中的/webapps/ROOT/目录下的index.html