一、需求分析
1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!!
2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于
- www.openlab.com/student 网站访问学生信息
- www.openlab.com/data网站访问教学资料
- www.openlab.com/money 网站访问缴费网站
3.要求
(1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。
(2)访问缴费网站实现数据加密基于https访问。
二、环境准备
本次搭建基于openEuler 22.03
系统,主要用到的工具包括:
- Nginx:作为 Web 服务器
- httpd-tools:提供用户认证工具
htpasswd
- OpenSSL:生成 SSL 证书,实现 HTTPS 加密
三、实现步骤
1.检查防火墙及SELinux是否关闭
首先检查关闭安全软件
[root@master ~]# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabl>
Active: inactive (dead)
Docs: man:firewalld(1)
[root@master ~]# getenforce
Disabled
2.接着下载所需相关软件
# 安装所需软件
[root@master ~]# yum install nginx -y
# Windows的C:\Windows\System32\drivers\etc\hosts 文件进行DNS映射
192.168.120.128 www.openlab.com # 添加
#用vim命令打开/etc/hosts 文件进行DNS映射
192.168.120.128 www.openlab.com # 添加
#设置开机启动
[root@master ~]# systemctl enable --now nginx
3.搭建网站目录及基础页面
(1)创建目录结构
为网站主页面和子页面创建对应的目录:
[root@master ~]# mkdir -p /www/openlab #主页面目录
[root@master ~]# mkdir -p /www/openlab/data #教学资料页面目录
[root@master ~]# mkdir -p /www/openlab/student #学生信息页面目录
[root@master ~]# mkdir -p /www/openlab/money #缴费网站目录
[root@master ~]# tree /www
/www
└── openlab
├── data
├── money
└── student
4 directories, 0 files
(2)创建页面内容
为每个目录编写基础 HTML 页面:
# 主页面:显示"welcome to openlab"
[root@master ~]# echo "welcome to openlab" > /www/openlab/index.html
# 教学资料页面:显示"data"
[root@master ~]# echo "data" > /www/openlab/data/index.html
# 学生信息页面:显示"student"
[root@master ~]# echo "student" > /www/openlab/student/index.html
# 缴费网站页面:显示"money"
[root@master ~]# echo "money" > /www/openlab/money/index.html
[root@master ~]# tree /www
/www
└── openlab
├── data
│ └── index.html
├── index.html
├── money
│ └── index.html
└── student
└── index.html
4 directories, 4 files
4. 配置 Nginx 实现域名访问
(1)修改 Nginx 主配置文件/etc/nginx/nginx.conf
,创建主网站www.openlab.com (核心配置如下):
[root@master ~]# vim /etc/nginx/nginx.conf
server {
listen 80; # 监听80端口(HTTP)
server_name www.openlab.com; # 绑定域名
root /www/openlab; # 主页面根目录
}
[root@master ~]# systemctl restart nginx
(2)创建教学资料子网站www.openlab.com/data
修改 Nginx 主配置文件/etc/nginx/nginx.conf
,定义域名、监听端口及目录映射:
[root@master ~]# vim /etc/nginx/nginx.conf # 接着之前的继续向下编写
server {
listen 80;
server_name www.openlab.com;
root /www/openlab;
#增加如下配置
location /data {
alias /www/openlab/data;
index index.html index.htm;
}
[root@master ~]# nginx -t # 检查语法,显示"ok"和"successful"说明正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@master ~]# systemctl restart nginx
(3)创建学生信息子网站www.openlab.com/student
通过htpasswd
工具创建用户认证文件,限制仅song
和tian
访问:
第一步!!!!!!
[root@master ~]# yum install httpd-tools -y # 若已安装会提示"already installed"
第二步 创建用户并且设置登陆密码!!!!!!
[root@master ~]# useradd song
[root@master ~]# passwd song
更改用户 song 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@master ~]# useradd tian
[root@master ~]# passwd tian
更改用户 tian 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
第三步 创建认证用户文件!!!!!
# 创建用户文件并添加song(-c表示创建新文件)
[root@master ~]# htpasswd -c /www/openlab/student/passwd song
New password: #密码123456
Re-type new password:
Adding password for user song
# 添加tian用户(无需-c,避免覆盖现有文件)
[root@master ~]# htpasswd /www/openlab/student/passwd tian
New password: #密码123456
Re-type new password:
Adding password for user tian
#查看用户文件确认配置:
[root@master ~]# cat /www/openlab/student/passwd
song:$apr1$qj/UmGMC$1sOO0SB9h8H8ALOK4BXiU/
tian:$apr1$kzjNlDCe$6hf5GvkU1oSUe5ZK8eiwg.
第四步 编写配置文件!!!!!
[root@master ~]# vim /etc/nginx/nginx.conf # 接着之前的继续向下编写
server {
listen 80;
server_name www.openlab.com;
root /www/openlab;
location /data {
alias /www/openlab/data;
index index.html index.htm;
}
#增加如下配置
location /student {
alias /www/openlab/student;
index index.html index.htm;
auth_basic "please input password";
auth_basic_user_file /www/openlab/student/passwd;
}
}
[root@master ~]# systemctl restart nginx
(4)创建缴费子网站www.openlab.com/money
通过 OpenSSL 生成 SSL 证书,实现www.openlab.com/money
的 HTTPS 访问。
第一步 生成 SSL 私钥和证书!!!!!
# 在/etc/nginx目录下制作整数所用的私钥文件money.key
[root@master ~]# openssl genrsa -aes128 2048 > /etc/nginx/money.key
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
.+++++
e is 65537 (0x010001)
Enter pass phrase: # 输入加密私钥的密码123456
Verifying - Enter pass phrase: # 再输一遍
# 制作证书
[root@master ~]# openssl req -utf8 -new -key /etc/nginx/money.key -x509 -days 365 -out /etc/nginx/money.crt
Enter pass phrase for /etc/nginx/money.key: # 需要输入加密私钥的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
# 注意:下列证书信息项目,在面试时常问
Country Name (2 letter code) [AU]:86 # 国家代码
State or Province Name (full name) [Some-State]:shaanxi # 省份
Locality Name (eg, city) []:xi'an # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab # 公司
Organizational Unit Name (eg, section) []:test # 部门
Common Name (e.g. server FQDN or YOUR name) []:master # 主机名
Email Address []:612612@qq.com # 邮箱
第二步 移除私钥密码(避免 Nginx 启动需手动输入密码)!!!
# 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
[root@master ~]# cp /etc/nginx/money.key /etc/nginx/money.key.org
[root@master ~]# openssl rsa -in /etc/nginx/money.key.org /etc/nginx/money.key
rsa: Use -help for summary.
[root@master ~]# openssl rsa -in /etc/nginx/money.key.org -out /etc/nginx/money.key
Enter pass phrase for /etc/nginx/money.key.org: # 输入加密私钥的密码
writing RSA key
第三步 配置 Nginx 的 HTTPS 服务!!!!!
[root@master ~]# vim /etc/nginx/nginx.conf
server {
listen 80;
server_name www.openlab.com;
root /www/openlab;
location /data {
alias /www/openlab/data;
index index.html index.htm;
}
location /student {
alias /www/openlab/student;
index index.html index.htm;
auth_basic "please input password";
auth_basic_user_file /www/openlab/student/passwd;
}
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
#增加以下内容
server {
listen 443 ssl http2;
server_name www.openlab.com;
location /money {
alias /www/openlab/money;
index index.html index.htm;
}
ssl_certificate "/etc/nginx/money.crt";
ssl_certificate_key "/etc/nginx/money.key";
}
#再次检查配置并重启 Nginx:
[root@master ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@master ~]# systemctl restart nginx
四、测试验证
1.主页面访问:在浏览器输入www.openlab.com
,显示welcome to openlab
2.教学资料页面:访问www.openlab.com/data
,显示data
3.学生信息页面:访问www.openlab.com/student
,弹出认证窗口,输入song
或tian
的用户名和密码后显示student
(输入错误则无法访问)
倘若我们输入错误的用户名sun,就会被拒绝访问
我们输入正确的用户名和密码song,就可以看到内容了
4.缴费网站:访问https://www.openlab.com/money
(注意是 https),浏览器可能提示证书不受信任(自签名证书正常现象),确认后显示money
在windows端打开浏览器,输入https://192.168.120.128,点击高级->接受风险并继续,就可以看到内容啦
五、总结
这次搭网站踩了不少坑,比如忘了关防火墙、改配置文件格式错了、生成证书时密码弄混了,但一步步试下来终于成了。感觉 Nginx 还挺强大的,能弄这么多不同的页面设置。以后再搭类似的网站,应该就不会这么手忙脚乱了,还可以使用内网穿透实现访问,但是不如花钱性能好哦