linux主机(dns服务器):
windows主机(用于测试):
sudo apt-get purge bind9
sudo apt-get -y install bind9
Bind的配置文件,放在/etc/bind9/目录下,主要的配置文件有以下4个,分别是:
/etc/bind9/named.conf(主配置文件)
/etc/bind9/named.default-zones;
/etc/bind9/named.conf.options;
/etc/bind9/named.conf.local(域名和数据文件的配置)
其中,/etc/bind9/named.conf是Bind的主配置文件,不过他并不包含DNS数据。查看/etc/bind9/named.conf文件可以发现,主配置文件里面使用了include关键字来加载其它3个配置文件。
在/etc/bind9/named.conf.options文件中,有一句默认的配置(如下),该语句的所示的目录的作用是存放正向解析以及反向解析的一些配置文件,该配置告诉Bind,到/var/cache/bind目录下去寻找数据文件
sudo vim /etc/bind/named.conf.local
zone "pppercy.com" {
//设置你要配置的域名
type master;
file "db.pppercy.com"; //这里指向了数据文件,具体位置在/var/cache/bind/db.pppercy.com
};
sudo cp /etc/bind/db.local /var/cache/bind/db.pppercy.com
sudo vim /var/cache/bind/db.pppercy.com
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
@ IN A 10.0.10.8
www IN A 10.0.10.8
@ IN AAAA ::1
sudo service bind9 restart
ipconfig /flushdns
这时我们的dns服务器已经搭建好了。只要是局域网内的主机,将dns都配置为你的dns主机ip。都可以通过
域名加端口访问你的项目了。但是平时我们访问一个网站,难道还要加上端口访问吗?现在,我们就用nginx的端
口转发,把这个讨厌的端口去掉
sudo apt-get install nginx
sudo vim /var/cache/bind/db.pppercy.com
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
@ IN A 10.0.22.20
www IN A 10.0.22.20
@ IN AAAA ::1
sudo vim /etc/nginx/sites-available/default
我们知道nginx.conf是nginx的主配置文件
但是在http模块中有这两行代码,一种包含关系
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*
sites-available是存放当前的server的配置, 在这里修改
而sites-enabled是激活并使用的server配置(从sites_available的文件创建快捷方式到sites-enabled)
你会发现sites-available里面增加的内容,会立即复制到sites-enabled里面
之间遇到一个问题,如果我直接把server的配置增加到主配置文件的http模块,配置一个可以正常启动,配置两个就启动失败,然后将server的配置都放到了sites-available/default这个文件就可以了
5. 添加以下内容
server {
listen 80;
server_name pppercy.com;
location / {
proxy_pass http://10.0.10.8:8030;
}
}
sudo service nginx restart
sudo service nginx restart
ipconfig /flushdns
解析流程:
访问pppercy.com域名——>dns服务器进行解析——>找到db.pppercy.com数据文件——>数据文件指向dns服务器主机ip的80端口(80端口可以省略)——>nginx监听了当前主机的80端口——>匹配nginx的配置文件的server项的server_name——>匹配成功——>成功转发到http://10.0.10.8:8030
讨论一个问题:nginx到底应该安装在哪里?
1.跑项目的主机(按道理来说项目应该是跑在linux主机的,这里为了测试方便就直接拿了个跑在windows主机的项目进行测试了)
2.dns服务器
如果安装到跑服务的主机 nginx的默认端口是80 而我们在bind9的数据文件中指向的正是10.0.10.8:80 当我们访问pppercy.com的时候 nginx配置的server的server_name将会匹配这一个域名 再转发到10.0.10.8:8030。这时我们同样可以实现端口转发。同样的,这台主机在8020端口又跑了一个服务,我们同样给nginx增加一个server配置 再到dns服务器配置一个pppercy2.com的域名,其数据文件也指向10.0.10.8:80,当我们访问pppercy2.com的时候 nginx又会转发到10.0.10.8:8020
但是 如果另一个项目跑在另一个主机 那又要重新安装一个nginx 这就导致了每一台跑服务的主机都需要安装nginx进行配置 所以 索性我们直接将nginx安装在dns服务器 无论哪台主机的项目 都需要先经过dns服务器进行解析 解析后再通过安装到当前dns服务器的nginx进行端口转发