好用到爆炸:让同一主机下的Bitnami应用共享80端口

注意:Bitnami官方已停止对 LNMP Bitnami Stack 的支持,该博文的相关内容可能已失效,请使用apt/yum方式安装原生Nginx!!!

1.前言

之前已经写过两篇文章介绍了两个我个人认为比较好用的bitnami堆栈:WordpressOwncloud

考虑到很多人会在同一个主机上运行多个bitnami应用,这些应用一般都内置了各自独立的LAMP运行环境,在安装部署时就已经分配好了监听端口。 比如Wordpress博客监听80端口,Owncloud网盘监听81端口,外加一个frp内网穿透http服务监听82端口 。

这样一来就遇到了一个不可避免的问题:访问同一主机(假设为192.168.1.1)上的Web应用时需要加上端口号:

连接 192.168.1.1 访问Wordpress博客

连接192.168.1.1:81 访问Owncloud网盘

连接192.168.1.1:82 指向内网穿透地址

但有些用户可能希望自己在访问网站时尽可能地方便,不想通过端口号来访问网站。这就需要Web服务器通过域名加以区分各Web应用,分配80端口的使用权。

2.使用Nginx进行端口转发

虽然Bitnami协议栈中的Apache2也可以进行端口转发,但是我不想破坏各协议栈之间的独立性,因此我想在协议栈之外引入一个Nginx服务器进行端口转发。

Nginx工作原理简图

这张图较为简略地介绍了Nginx的工作原理:当有两个以上的域名指向Nginx所在的服务器时,Nginx可以通过接入的域名来指向对应的Web应用。

好在有Nginx的Bitnami协议栈,为了尽量不破坏服务器本身的系统环境,我仍然选择使用Bitnami安装Nginx。

3.安装LNMP Bitnami Stack

3.1安装前准备

在安装前首先要确定没有任何Bitnami协议栈或者服务器应用占用了80和443端口。如有占用则必须更改

进入各bitnami协议栈/apache2/conf文件夹,修改http.d.conf,找到如下字段:

Listen 80

ServerName localhost:80

将80改为未被占用的其他端口


找到如下字段:

#LoadModule remoteip_module modules/mod_remoteip.so

将前面的#号注释取消掉,使apache能接收nginx发来的真实访客IP

再在 http.d.conf 中添加以下两项

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

修改bitnami文件夹下的bitnami.conf文件,找到如下字段:

<VirtualHost _default_:80>
<VirtualHost _default_:443>

将80改为与http.d.conf中相同的端口,443端口改为未被占用的其他端口


用同样的方法更改各Web应用的监听端口(80和443都要改,不管有没有全部用到),假设此时重新分配后:

Wordpress监听81端口

Owncloud监听82端口

Frp内网穿透监听83端口

3.2安装LNMP

下载并运行协议栈安装程序

wget https://downloads.bitnami.com/files/stacks/nginx/1.16.1-2/bitnami-nginxstack-1.16.1-2-linux-x64-installer.run

chmod 755 bitnami-nginxstack-1.16.1-2-linux-x64-installer.run

./bitnami-nginxstack-1.16.1-2-linux-x64-installer.run

选择安装组件(全选Y即可)

#Select the components you want to install; clear the components you do not want 
#to install. Click Next when you are ready to continue.

Varnish [Y/n] :Y

PhpMyAdmin : Y (Cannot be edited)

Is the selection above correct? [Y/n]: Y

选择安装文件夹,这里我选择默认目录

#Installation folder

#Please, choose a folder to install Bitnami Nginx Stack

Select a folder [/opt/nginxstack-1.16.1-2]: 

设置root账户的 SQL数据库密码

#Create MySQL 'root' Account

#Bitnami Nginx Stack database root user creation

Password :
Re-enter :

当MYSQL默认端口被占用时,会提示指派一个新端口,这里我选择了自动指派的3307

#MySQL Information

#Please enter your MySQL database information:

#Choose a port that is not currently in use, such as port 3307.

MySQL Server port [3307]: 

输入Y确定开始安装,进度条走完后输入Y启动LNMP

#Setup is now ready to begin installing Bitnami Nginx Stack on your computer.

#Do you want to continue? [Y/n]: Y

----------------------------------------------------------------------------
#Please wait while Setup installs Bitnami Nginx Stack on your computer.

 #Installing
 #0% ______________ 50% ______________ 100%
 ##########################################

----------------------------------------------------------------------------
#Setup has finished installing Bitnami Nginx Stack on your computer.

Launch Bitnami Nginx Stack [Y/n]: Y

此时浏览器中输入服务器IP地址,能看见下图所示的LNMP说明页就表示Nginx启动成功了。

4.配置Nginx端口分配

4.1解析域名到服务器

为三个不同的Web应用准备不相同的域名(可以是二级域名,也可以是不同的域名),全部解析到该服务器上。比如:

test.com

www.test.com

pan.test.com

frp.test.com

4.2修改Nginx配置文件

找到Nginx安装目录,编辑bitnami.conf文件

#备份原文件
cp /opt/nginxstack-1.16.1-2/nginx/conf/bitnami/bitnami.conf /opt/nginxstack-1.16.1-2/nginx/conf/bitnami/bitnami.conf.bak

#编辑bitnami.conf
vi /opt/nginxstack-1.16.1-2/nginx/conf/bitnami/bitnami.conf

将配置文件修改为如下形式

#创建一个upstream节点wordpress,指向本机WP的81端口
upstream wordpress {
	server 127.0.0.1:81;
}


#创建一个upstream节点owncloud,指向本机Owncloud的82端口
upstream frps {
	server 127.0.0.1:82;
}


#创建一个upstream节点frps,指向Frps的83端口
upstream frps {
	server 127.0.0.1:83;
}


#将test.com和www.test.com的请求指向Wordpress博客
server {
	listen 80;

	server_name test.com www.test.com;
	client_max_body_size 40M;
	location / {
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;

                #这里指向upstream节点名
		proxy_pass http://wordpress/;
	}	
}


#将pan.test.com的请求指向Owncloud网盘
server {
	listen 80;
	server_name pan.test.com;
	client_max_body_size 40M;
	location / {
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;

                #这里指向upstream节点名
		proxy_pass http://owncloud/;
	}	
}


#将frp.test.com的请求指向frp内网穿透
server {
	listen 80;
	server_name frp.test.com;
	location / {
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;

                #这里指向upstream节点名
		proxy_pass http://frps/;
	}	
}

如果要禁止直接通过IP访问网站,还可以增加下面的内容

server 
{ 
    listen 80 default_server; 
    server_name _; 
    return 444; 
}

保存配置文件后重启Nginx服务

bash /opt/nginxstack-1.16.1-2/ctlscript.sh restart

重启服务后,Nginx将根据域名指向不同的web应用:

访问 test.com 和 www.test.com 进入Wordpress博客

访问 pan.test.com 进入Owncloud网盘

访问 frp.test.com 进入Frps指向的IP地址

2人评论了“好用到爆炸:让同一主机下的Bitnami应用共享80端口”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注