前言:
当前各位老铁们对“nginx一个域名转发多个端口”大约比较讲究,我们都需要分析一些“nginx一个域名转发多个端口”的相关资讯。那么小编也在网摘上搜集了一些有关“nginx一个域名转发多个端口””的相关文章,希望咱们能喜欢,各位老铁们快快来学习一下吧!# 高可用的并发解决方案nginx+keepalived(二)
## 一、Nginx负载均衡模块
### 1、Nginx处理HTTP负载均衡模块(HTTP Upstream)
这个模块为后端的服务器提供简单的负载均衡(轮询(round-robin)和连接IP(client IP))
如下例:vim /usr/local/server/nginx/conf/nginx.conf
```bash
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass ;
}
}
```
### 2、Nginx处理HTTP负载均衡模块(HTTP Upstream)指令:ip_hash
1)语法:ip_hash
2)默认值:none
3)使用字段:upstream
4)这个指令将基于客户端连接的IP地址来分发请求。
5)哈希的关键字是客户端的C类网络地址,这个功能将保证这个客户端请求总是被转发到一台服务器上,但是如果这台服务器不可用,那么请求将转发到另外的服务器上,这将保证某个客户端有很大概率总是连接到一台服务器。
6)无法将权重(weight)与ip_hash联合使用来分发连接。如果有某台服务器不可用,你必须标记其为“down”,
7)如下例 vim /usr/local/server/nginx/conf/nginx.conf
```bash
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
```
### 3、Nginx处理HTTP负载均衡模块(HTTP Upstream)指令:server
1)语法:server name [parameters]
2)默认值:none
3)使用字段:upstream
4)指定后端服务器的名称和一些参数,可以使用域名,IP,端口,或者unix socket。如果指定为域名,则首先将其解析为IP。
- weight = NUMBER - 设置服务器权重,默认为1。
- max_fails = NUMBER - 在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为1,将其设置为0可以关闭检查,这些错误在proxy_next_upstream或fastcgi_next_upstream(404错误不会使max_fails增加)中定义。
- fail_timeout = TIME - 在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout和proxy_read_timeout来控制。
- down - 标记服务器处于离线状态,通常和ip_hash一起使用。
- backup - (0.6.7或更高)如果所有的非备份服务器都宕机或繁忙,则使用本服务器(无法和ip_hash指令搭配使用)。
5)示例配置vim /usr/local/server/nginx/conf/nginx.conf
```bash
upstream backend {
server backend1.example.comweight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
```
6)注意:如果你只使用一台上游服务器,nginx将设置一个内置变量为1,即max_fails和fail_timeout参数不会被处理。
结果:如果nginx不能连接到上游,请求将丢失。
解决:使用多台上游服务器。
### 4、Nginx处理HTTP负载均衡模块(HTTP Upstream)指令:upstream
1)语法:upstream name { ... }
2)默认值:none
3)使用字段:http
4)这个字段设置一群服务器,可以将这个字段放在proxy_pass和fastcgi_pass指令中作为一个单独的实体,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。
服务器可以指定不同的权重,默认为1。
5)示例配置vim /usr/local/server/nginx/conf/nginx.conf
```bash
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
```
## 二、Nginx访问控制模块HTTP访问控制模块(HTTP Access)
### 1、Nginx处理HTTP访问控制模块(HTTP Access)
1)这个模块提供简单的基于主机的访问控制。
2)ngx_http_access_module这个模块可以详细的检查客户端IP,并且按顺序执行第一条匹配的规则。
3)如下例:vim /usr/local/server/nginx/conf/nginx.conf
```bash
location / {
deny192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
denyall;
}
```
4)上面的例子中仅允许192.168.1.0/24和10.1.1.0/16网络段访问,但192.168.1.1是个例外。
如果要实施很多复杂的规则,那么最好使用GeoIP module模块。
### 2、Nginx处理HTTP访问控制模块(HTTP Access)指令 allow
1)语法:allow [ address | CIDR | all ]
2)默认值:no
3)使用字段:http, server, location, limit_except
指令指定了允许访问的IP或网络段。
### 3、Nginx处理HTTP访问控制模块(HTTP Access)指令deny
1)语法:deny [ address | CIDR | all ]
2)默认值:no
3)使用字段:http, server, location, limit_except
指令指定了拒绝访问的IP或网络段。
4)提示和技巧
HttpAccess模块可以和error_page指令搭配使用来重定向一个未经验证的访问请求。
```bash
error_page 403 ;
location / {
deny192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
denyall;
}
```
## 三、Nginx + tomcat实现集群
### 1、当我们网站并发量高的时候,一台tomcat无法承受大量并发,可以考虑Nginx+Tomcat集群来实现。
### 2、配置说明
准备3台tomcat,端口分别是8081、8082、8083,针对同一个域名,每次用Nginx实现不同的转发,分别在每个tomcat的webapps目录下创建ROOT目录,并创建index.html,分别在html的body里标记1/2/3以示区分。
### 3、打开 VirtualBox 虚拟机 启动 CentOS7,确认已经安装 nginx ,nginx 下载安装请点击:
### 4、部署 tomcat 集群
1)上传 tomcat 到服务器,解压即安装,复制 3 份
```bash
# 切换目录
cd /usr/local
# 创建目录
mkdir tomcat
# 切换 到 tomcat目录
cd /usr/local/tomcat
# 上传tomcat 到服务器的 /usr/local/tomcat/ 目录下。
# 解压缩 tomcat
[root@localhost tomcat]# tar -zxvf apache-tomcat-8.5.70.tar.gz
# 更名
[root@localhost tomcat]# mv apache-tomcat-8.5.70 apache-tomcat-1
# 复制3份
[root@localhost tomcat]# cp -r apache-tomcat-1 apache-tomcat-2
[root@localhost tomcat]# cp -r apache-tomcat-1 apache-tomcat-3
```
2)配置端口
tomcat-1 端口:8015 8081 8019
tomcat-2 端口:8025 8082 8029
tomcat-3 端口:8035 8083 8039
```bash
# 切换 到 tomcat目录
cd /usr/local/tomcat
# 1)更改 tomcat-1 端口
[root@localhost tomcat]# vim apache-tomcat-1/conf/server.xml
# 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
.........
<Server port="8015" shutdown="SHUTDOWN">
.........
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
.........
<Connector protocol="AJP/1.3"
address="::1"
port="8019"
redirectPort="8443" />
# ESC + :wq 保存退出
# 2)更改 tomcat-1 端口
[root@localhost tomcat]# vim apache-tomcat-1/conf/server.xml
# 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
.........
<Server port="8025" shutdown="SHUTDOWN">
.........
<Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
.........
<Connector protocol="AJP/1.3"
address="::1"
port="8029"
redirectPort="8443" />
# ESC + :wq 保存退出
# 3)更改 tomcat-1 端口
[root@localhost tomcat]# vim apache-tomcat-3/conf/server.xml
# 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
.........
<Server port="8035" shutdown="SHUTDOWN">
.........
<Connector port="8083" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
.........
<Connector protocol="AJP/1.3"
address="::1"
port="8039"
redirectPort="8443" />
# ESC + :wq 保存退出
```
3)删除 tomcat/webapps/ 目录下的所有内容,重新创建 tomcat/webapps/ROOT/ 目录,并分别创建页面 tomcat/webapps/ROOT/index.html
```bash
# 切换 到 tomcat目录
cd /usr/local/tomcat
# 查看tomcat/webapps/ 目录下的所有内容
[root@localhost tomcat]# ll ./apache-tomcat-1/webapps/
总用量 4
drwxr-x---. 15 root root 4096 9月 20 09:22 docs
drwxr-x---. 7 root root 99 9月 20 09:22 examples
drwxr-x---. 6 root root 79 9月 20 09:22 host-manager
drwxr-x---. 6 root root 114 9月 20 09:22 manager
drwxr-x---. 3 root root 223 9月 20 09:22 ROOT
# 删除 tomcat/webapps/ 目录下的所有内容
[root@localhost tomcat]# rm -rf ./apache-tomcat-1/webapps/*
[root@localhost tomcat]# rm -rf ./apache-tomcat-2/webapps/*
[root@localhost tomcat]# rm -rf ./apache-tomcat-3/webapps/*
# 重新创建 tomcat/webapps/ROOT/ 目录
[root@localhost tomcat]# mkdir ./apache-tomcat-3/webapps/ROOT
[root@localhost tomcat]# mkdir ./apache-tomcat-2/webapps/ROOT
[root@localhost tomcat]# mkdir ./apache-tomcat-1/webapps/ROOT
#分别创建页面 tomcat/webapps/ROOT/index.html
[root@localhost tomcat]# vim ./apache-tomcat-1/webapps/ROOT/index.html
# 内容如下:
<html>
<head>tomcat-1</head>
<body>
<h1> 这是 tomcat-1 的 index.html 页面,端口:8081 </h1>
</body>
</html>
# ESC + :wq 保存退出
[root@localhost tomcat]# vim ./apache-tomcat-2/webapps/ROOT/index.html
# 内容如下:
<html>
<head>tomcat-2</head>
<body>
<h2> 这是 tomcat-2 的 index.html 页面,端口:8082 </h2>
</body>
</html>
# ESC + :wq 保存退出
[root@localhost tomcat]# vim ./apache-tomcat-3/webapps/ROOT/index.html
# 内容如下:
<html>
<head>tomcat-3</head>
<body>
<h3> 这是 tomcat-3 的 index.html 页面,端口:8083</body> </h3>
</html>
# ESC + :wq 保存退出
```
### 5、启动 tomcat 集群
```bash
# 切换 到 tomcat目录
cd /usr/local/tomcat
# 启动 tomcat
[root@localhost tomcat]# ./apache-tomcat-1/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-1
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-1
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-1/temp
Using JRE_HOME: /usr/local/jdk8/java-se-8u43-ri
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-1/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-1/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@localhost tomcat]# ./apache-tomcat-2/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-2
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-2
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-2/temp
Using JRE_HOME: /usr/local/jdk8/java-se-8u43-ri
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-2/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-2/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@localhost tomcat]# ./apache-tomcat-3/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-3
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-3
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-3/temp
Using JRE_HOME: /usr/local/jdk8/java-se-8u43-ri
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-3/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-3/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
# 确认防火墙已经放行 8081 8082 8083 端口。
[root@localhost tomcat]# vim /etc/sysconfig/iptables
# 防火墙内容如下:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8082 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8083 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# ESC + :wq 保存退出
# 重启防火墙
service iptables restart
# 或者(使用的是 firewall)让防火墙放行端口:8081 8082 8083
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --zone=public --add-port=8083/tcp --permanent
# 设置完,重新载入防火墙(使用的是 firewall)
firewall-cmd --reload
```
### 6、访问测试 tomcat,浏览器地址栏输入(其中:192.168.43.216 为你的虚拟机 IP 地址):
### 7、nginx 集群配置
1)打开 nginx 配置文件
```bash
# 切换目录
[root@localhost nginx]# cd /usr/local/nginx
# 打开 nginx 配置文件
vim /usr/local/nginx/nginx/conf/nginx.conf
# 配置内容如下:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Nginx处理HTTP负载均衡
upstream clustertomcat {
server 192.168.43.216:8081 weight=2;
server 192.168.43.216:8082 weight=1;
server 192.168.43.216:8083 weight=1;
}
server {
# nginx 默认监听端口80
listen 80;
server_name localhost;
location / {
# 代理路径
proxy_pass ;
}
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
# ESC + :wq 保存退出
# 切换目录
cd /usr/local/nginx/
# 重新载入 nginx
[root@localhost nginx]# ./nginx/sbin/nginx -s reload
# 或者先停止 nginx 再重新启动 nginx
[root@localhost nginx]# ./nginx/sbin/nginx -s quit
[root@localhost nginx]# ./nginx/sbin/nginx -c /usr/local/nginx/nginx/conf/nginx.conf
```
2)访问测试 nginx 负载均衡,浏览器地址栏输入(其中:192.168.43.216 为你的虚拟机 IP 地址):多刷新几次,观察访问的页面。
上一节关联链接请点击:
标签: #nginx一个域名转发多个端口