利用nginx服务搭建一个网站

主机名称和IP地址规划

服务 主机名 eth0网卡IP eth1网卡IP 软件
防火墙服务器 firewalld 10.0.0.81 172.16.1.81 firewalld
负载均衡服务器 lb01 10.0.0.5 172.16.1.5 nginx,keepalived
负载均衡服务器 lb02 10.0.0.6 172.16.1.6 nginx,keepalived
web服务器 web01 10.0.0.7 172.16.1.7 nginx
web服务器 web02 10.0.0.8 172.16.1.8 nginx
web服务器 web03 10.0.0.9 172.16.1.9 nginx
存储服务器 nfs01 10.0.0.31 172.16.1.31 nfs
备份服务器 backup 10.0.0.41 172.16.1.41 rsync
数据库服务器 db01 10.0.0.51 172.16.1.51 mysql,mariaDB
批量管理服务器 m01 10.0.0.61 172.16.1.61 ansible
跳板机服务器 jumpserver 10.0.0.71 172.16.1.71 jumpserver
监控服务器 zabbix 10.0.0.72 172.16.1.72 zabbix
缓存服务器 暂无 暂无 暂无 暂无

编写虚拟主机配置文件

  • location外面的信息,全局配置信息
  • location里面的信息,局部配置信息
vi /etc/nginx/conf.d/www.conf

server {
#监听地址和端口
   listen        80;
#主机名
   server_name   www.1997sty.com;
#主机目录位置
   location  / {
#站点目录
     root  /usr/share/nginx/html;
#首页名称
     index 1997sty.html;
   }
}

需要获取网站代码

vi /usr/share/nginx/html/1997sty.html

<!DOCTYPE html>
<html>
<head>
    <title>1997sty</title>
</head>
<body>
<a href="http://blog.1997sty.com">blog.1997sty.com</a>
</body>
</html>

配置域名

  • 因为你使用的域名要解析本地的服务器,需要配置hosts文件,并加入以下记录
  • windows : C:\Windows\System32\drivers\etc\hosts
  • linux : /etc/hosts
10.0.0.7 www.1997sty.com
10.0.0.8 www.1997sty.com
10.0.0.9 www.1997sty.com

重启nginx服务

systemctl reload nginx
systemctl restart nginx 
nginx -s reload

nginx命令参数

  • -t : test configuration and exit(检查测试配置文件语法)
  • -s : send signal to a master process: stop, quit, reopen, reload(控制服务停止或者重新启动)

进行测试访问

QQ截图20191228102821.png

部署搭建网站常见错误

网站服务配置文件编写不正确

404 错误

  • 找不到对象,需要确认配置文件中locationroot的指向是否正确
  • 站点目录中是否有对于的目录

403 错误

  • 不要禁止访问
  • 检查index配置的首页文件是否存在

DNS信息不正确

  • 如果是购买的域名,需要配置正确的地址
  • 如果是修改hosts文件,需要确认是否配置正确

重启服务

  • 修改nginx配置文件后需要重启服务

利用nginx服务搭建多个网站

  • 与搭建一个网站方法相同,只需要添加多个配置文件和目录即可
  • 访问同一台主机的多个网站优先根据端口访问,其次算hosts信息

网站页面的访问原理

  1. 将域名进行解析
  2. 建立TCP的连接(四层协议)
  3. 根据应用层HTTP协议发出请求
  4. 没有相同域名的server主机,会找满足端口要求的第一个主机,显示主机的网站页面

企业中虚拟主机访问方式

  • 基于域名的方式进行访问
  • 基于地址的方式进行访问 负载均衡+高可用服务
  • 基于端口的方式进行访问 (zabbix服务和web服务都会用到80端口,会造成冲突)

企业中网站的安全访问配置(黑白名单)

  • nginx访问模块: ngx_http_access_module
  • 可以写ipv4地址也可以写ipv6,也可以写一个ip段
  • allow : 允许访问,也就是白名单
  • deny : 禁止访问,也就是黑名单
  • Syntax: deny address | CIDR | unix: | all;
  • Default: —
  • Context: http, server, location, limit_except
location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

根据用户访问进行认证

  • nginx认证模块: ngx_http_auth_basic_module
location / {
#开启认证功能
   auth_basic           "closed site";
#加载用户密码文件
   auth_basic_user_file conf/htpasswd;
}

编写虚拟主机配置文件

server {
   listen        80;
   server_name   www.1997sty.com;
   location  / {
     root  /usr/share/nginx/html;
     auth_basic           "1997sty";
     auth_basic_user_file conf/htpasswd;
     index 1997sty.html;
   }
}

创建密码文件(文件中密码信息必须是密文的)

  • htpasswd : 创建一个有密文信息的密码文件
[root@web01 conf]# pwd
/etc/nginx/conf
[root@web01 conf]# htpasswd -bc htpasswd 1997sty 123456

htpasswd命令参数

  • -c : 创建一个密码文件
  • -n : 不会更新文件;显示文件内容信息
  • -b : 免交互方式输入用户密码信息
  • -i : 读取密码采用标准输入方式,并不做检查
  • -m : md5加密算法(默认)
  • -B : 使用bcrypt对密码进行加密(非常安全)
  • -C : 使用bcrypt algorithm对密码进行加密
  • -d : CRYPT加密算法
  • -s : SHA加密算法
  • -p : 不进行加密
  • -D : 删除指定用户
  • -v : 验证指定用户的密码

修改密码文件信息

  • 为了安全起见,修改文件权限为600,文件属主为nginx
chmod 600 ./htpasswd
chown nginx.root ./htpasswd

重启服务后访问

会要求输入正确的用户名和密码

QQ截图20191228115926.png

如果linux设置了hosts文件也可以使用curl访问

  • -u, --user USER[:PASSWORD] Server user and password
#输入命令后输入密码
curl www.1997sty.com -u 1997sty
#输入命令后可以直接访问
curl www.1997sty.com -u oldboy:123456