nginx应该算是当前比较流行的web服务器,体积小性能好,可实现高并发连接,据说可承受5万的并发量,并且使用比较简单,可以实现热部署。今天我们就来简单搞一搞。
一. 安装
截止到目前最新的版本是1.14.2. 到目前为止我的博客里已经分别讲了mysql的安装,redis的安装,其实大家应该能够总结出一些规律,首先第一步肯定是先获取安装包。获取安装包有两种方式,一种是使用wget获取,一种是直接去官网下载,由于我在使用wget的时候连接超时了。所以我使用的是去官网下载。下载链接: http://nginx.org/en/download.html
下载好了之后,使用rz上传到服务器上,然后放到自己的一个目录下,我的软件都统一放在了/usr/software文件夹下。
首先就是解压安装包:
代码语言:javascript复制tar -zxvf nginx-1.14.2.tar.gz
解压之后,进入目录; cd /nginx-1.14.2, 执行如下命令
代码语言:javascript复制./configure
这个时候nginx开始执行配置,配置过程中有可能会出现错误。
如果出现了: ./configure: error: the HTTP gzip module requires the PCRE library.
安装相应的包: yum -y install pcre-devel 即可
重新 ./configure
如果出现了: ./configure: error: the HTTP gzip module requires the zlib library.
安装相应的包: yum install -y zlib-devel 即可
重新 ./configure
直到最后成功。成功后,会在/usr/local/ 下生成nginx文件夹。我们启动一下服务。
代码语言:javascript复制cd /usr/local/nginx/sbin
./nginx
服务启动后,在浏览器输入ip:80 即可出现nginx访问页面, 80端口可不加
二. 反向代理和负载均衡。
如何理解反向代理呢,
首先我们先说明一下正向代理。比如说我们想访问谷歌,但是由于某些原因无法访问,所以我们就可以科学上网,先访问到谷歌。而这个科学上网就是正向代理,通过它,达到我们的目标。
而反向代理正好相反,比如我们访问百度,输入www.baidu.com. 而这个域名其实就是我们的目标,我们先获取到了我们的目标,但是这个域名后面可能由几十台服务器,而访问域名后,帮我们跳到了其中一台服务器上,这就是反向代理,所以正向反向的区别就在于目标服务器在前还是在后。
有了反向代理,就可以帮我们负载均衡,比如百度,代理到了后面的几十台服务上,几十台服务器就起到了负载均衡的作用,让流量平摊到了不同节点上。
好,接下来我们来玩一下这个反向代理。 我的nginx装在了192.168.1.12这台机器上,我希望通过访问192.168.1.12能帮我把请求转到192.168.1.13 和 192.168.1.14这两台机器上。目标在前,就是反向代理。首先我们在192.168.1.13 和 192.168.1.14两个机器上部署两个springboot应用,直接返回本机ip:
现在我们希望访问12这台机器能够反向代理到这两台机器上。直接修改nginx配置文件:
vim /usr/local/nginx/conf/nginx.conf
代码语言:javascript复制http {
upstream action{
server 192.168.1.13:8888;
server 192.168.1.14:8888;
}
#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 {
listen 8888;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://action;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
」
重启nginx:
cd /usr/local/nginx/sbin/
./nginx -s reload 完成。
这个时候,我们访问 192.168.1.12:8888 (8888是在上面listen中配置的,也可以配置成其他的)。
再刷新:
说明一会访问到了13,一会访问到了14. 这就是反向代理和负载均衡。由于我在upstream中没有配置任何策略,现在默认是轮训策略,就是一下是13,一下是14. 除此之外,还可以选用权重和hash, 权重只需在upstream server后面的ip地址后加上weight, 就会根据权重选择。 如果是iphash, 会根据ip的hash值计算,如果总共两台,就对2取余,落到其中一台上,这种方式的特点就是,相同的ip会有固定的一台机器处理,有时候有这种方式解决分布式环境下的session一致问题。