文章目录
注意:Bitnami官方已停止对 LNMP Bitnami Stack 的支持,该博文的相关内容可能已失效,请使用apt/yum方式安装原生Nginx!!!
1.前言
之前已经写过两篇文章介绍了两个我个人认为比较好用的bitnami堆栈:Wordpress和Owncloud
考虑到很多人会在同一个主机上运行多个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可以通过接入的域名来指向对应的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地址
这已经是一个系列了么
情不自禁就套用了