实验要求
1.防火墙不能关闭,让其开放http协议https协议
2.该网站具备账户验证
3.https
1.打开防火墙并把http和https服务(允许80/tcp和443/tcp端口)
1-1打开防火墙和nginx服务
bash
//1.查看服务状态
[root@server ~]# systemctl status firewalld.service
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@server ~]# systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Thu 2025-11-27 14:39:08 CST; 2min 9s ago
//2.开启未开启的服务
[root@server ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
Active: active (running) since Thu 2025-11-27 14:42:51 CST; 2s ago
[root@server ~]#
1-2允许http和https
bash
#1.添加服务的方式允许nginx
firewall-cmd --add-service=http
firewall-cmd --add-service=https
#2.添加端口的方式允许nginx
firewall-cmd --add-port=80/tcp
firewall-cmd -add-port=443/tcp
[root@server ~]# firewall-cmd --add-port=80/tcp
success
[root@server ~]# firewall-cmd --add-port=443/tcp
success
#取消
firewall-cmd --remove-port=80/tcp
firewall-cmd --remove-service=http
#注意:如果不保存,防火墙服务重启时这些规则会消失
#保存命令即在选项前加--permanent(永久的长久的)
firewall-cmd --permanent --add-service=http
#重新加载
firewall-cmd --reload
#永久删除同理
firewall-cmd --permanent --remove-service=http
1-3验证
bash
# 查看当前活动的防火墙规则
firewall-cmd --list-all
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports: 80/tcp 443/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.25.200" service name="http" reject
[root@server ~]#
# 只查看开放的端口
firewall-cmd --list-ports
[root@server ~]# firewall-cmd --list-ports
80/tcp 443/tcp
[root@server ~]#
# 只查看允许的服务
firewall-cmd --list-services
2.网站要进行用户验证
bash
1.新增一个管理网站登录的用户(用于用户验证)
[root@server ~]# useradd xier0
[root@server ~]# passwd xier0
更改用户 xier0 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]#
2.将网站和账户关联
2-1 安装工具httpd-tools
yum install httpd-tools
2-2 使用htpasswd命令关联用户和网站
htpasswd -c /etc/nginx/passwd xier1
New password:
#-c: 表示创建一个新的密码文件
#- 重要性 : 如果指定的文件已存在,使用 -c 选项会覆盖该文件
#- 注意事项 : 当要向现有文件添加新用户时,不应该使用此选项
#- 密码强度 : 系统会接受任何密码,但强密码对安全性至关重要
#- 加密算法 : 默认使用 MD5 哈希,可通过 -B (bcrypt)、 -d (CRYPT)等选项指定其他算法
3.修改nginx的配置文件
vim /etc/nginx/nginx.conf
36 include /etc/nginx/conf.d/*.conf;
37
38 server {
39 listen 80;
40 #listen [::]:80;
41 server_name www.xier0.com;
42 #root /usr/share/nginx/html;
43 root /web;
44 # index wanglx.html;
45 autoindex on;
46 #index 2.png;
47 auth_basic "input your passwd";//登录提示
48 auth_basic_user_file /etc/nginx/passwd;//管理网站的密码文件
49
50 # Load configuration files for the default server block.
51 include /etc/nginx/default.d/*.conf;
52
53 error_page 404 /404.html;
54 location = /404.html {
55 }
56
57 error_page 500 502 503 504 /50x.html;
58 location = /50x.html {
59 }
60 }
61
62 # Settin
4.检查并重新加载
nginx -t
nginx -s reload
5.浏览器验证

注意:如果使用windows浏览器验证,要在
C:\Windows\System32\drivers\etc\hosts文件中添加对应网站域名的IP地址解析


2-2如果已经有管理账户的密码文件,则
bash
[root@server ~]# htpasswd /etc/nginx/passwd xier0
New password: #(xier)
Re-type new password:
Adding password for user xier0
[root@server ~]#
// 如果该用户名已存在,将更新其密码
//- -D :删除用户,例如 htpasswd -D /etc/nginx/passwd xier1
//- -v :验证用户密码是否正确
//- -b :在命令行中直接提供密码(不推荐,因为密码会显示在命令历史中)
3.搭建https
https即http + ssl(socket secret layer)
3-1 创建https网页证书
bash
//1.创建非对称加密使用的私钥文件
openssl genrsa -out xier1.key
//2.通过私钥文件生成证书文件
openssl req -new -key xier1.key -x509 -days 365 -out xier1.crt
// req:申请创建证书
//-new:新的证书
//-key xier1.key:使用xier1.key这个密钥
//-x509: 此为测试证书
/-days: 证书有效期
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) [XX]:cn
State or Province Name (full name) []:guangxi
Locality Name (eg, city) [Default City]:huilin
Organization Name (eg, company) [Default Company Ltd]:eg
Organizational Unit Name (eg, section) []:xi^Huexiao
Common Name (eg, your name or your server's hostname) []:xier0,^H^H^H
Email Address []:xier
3-2
bash
//1.将生成的证书移动到nginx配置目录中'
[root@server xier]# mv xier0.key xier0.crt /etc/nginx/
[root@server xier]#
//2.绑定虚拟主机和证书
server {
listen 443 ssl; # 监听443端口并启用SSL
server_name www.xier1.com; # 你的域名
# SSL证书配置
ssl_certificate /etc/nginx/xier1.crt; # 证书文件路径
ssl_certificate_key /etc/nginx/xier1.key; # 私钥文件路径
# 网站根目录
root /var/www/html; # 你的网站文件目录
index index.html index.htm index.php; # 默认索引文件
}
}
//3.检查并重新加载
nginx -t
nginx -s reload
//4.浏览器验证
