目录
🌞一、域名解析基础知识
定义:
域名解析是将域名转换为计算机可识别的IP地址的过程。因为计算机在互联网上使用IP地址进行通信,而人们更容易记住具有意义的域名,所以域名解析起到了连接人类和计算机之间的桥梁作用。
简单示例:用户使用域名为www.example.com,当用户在浏览器中输入该域名时,系统会通过域名解析将其转换为相应的服务器IP地址如149.88.68.125,以便找到正确的服务器。
1. 记录类型
- A-将域名指向一个IPV4地址【用的最多】
- CNAME-将域名指向另外—个域名
- AAAA-将域名指向一个IPV6地址
- NS-将子域名指定其他DNS服务器解析
- MX-将域名指向邮件服务器地址
- SRV-记录提供特定的服务的服务器
- TXT-文本长度限制512,通常做SPF记录(反垃圾邮件)
- CAA-CA证书颁发机构授权校验
- 显性URL-将域名重定向到另外—个地址
- 隐性URL-与显性URL类似,但是会隐藏真实目标地址
2. 主机记录【域名前缀】
比如:常用主机记录及含义如下:
- www 表示域名www.example.cn
- @ 表示主域名example.cn
- * 泛解析,表示满足格式*.example.cn的所有域名(记录类型为"显性URL"时,不允许设置泛解析)
- mail 表示域名mail.example.cn,常用于邮箱业务的解析设置
- m 表示域名m.example.cn,常用于手机网站
- 二级域名如abc.example.cn,则填写abc
- 多级域名如ab.cd.ef.example.cn ,则填写ab.cd.ef
比如解析主机记录是@,则使用 主域名example.cn 等价于访问www.example.cn
3. 记录值
一般是服务器的IP地址,如149.88.68.125
域名解析过程如下:
- 用户在浏览器中输入 www.example.com。
- 操作系统首先检查本地缓存中是否有该域名对应的IP地址,如果有,就直接使用缓存中的IP地址。
- 如果本地缓存没有该域名的记录,操作系统会发送一个DNS请求到本地DNS服务器。
- 本地DNS服务器如果有缓存该域名对应的IP地址,则返回给操作系统。否则,它会向根DNS服务器发出请求。
- 根DNS服务器返回顶级域(TLD)服务器的IP地址。
- 本地DNS服务器向TLD服务器发出请求,获取下一级域的DNS服务器的IP地址。
- 本地DNS服务器向下一级域的DNS服务器发出请求,直到最终获取到www.example.com对应的IP地址。
- 本地DNS服务器将获取到的IP地址返回给操作系统,并同时缓存该记录。
- 操作系统使用获取到的IP地址与服务器建立连接,开始访问网站。
这样,域名解析使得用户只需输入易记的域名,而不必记住复杂的IP地址。
🌞二、域名解析服务器IP地址
🌼1. 操作步骤
【域名解析添加记录】
说明:
- 主机记录一般填写@、www
- 记录类型填A
- 记录值填写服务器IP地址
比如解析主机记录是@,则使用 主域名example.cn 等价于访问www.example.cn
添加结果如下:
🌼2. 验证
本地使用win+R输入cmd进入CMD.exe窗口
输入
ping 域名
查看是否返回主机信息。
示例
使用了域名sarpro.cn绑定了服务器【IP为:149.88.68.125】
cmd输入
ping sarpro.cn
显示内容如下:
🌞三、域名绑定服务器端口+申请ssl证书
下面两种方式任选一种即可【推荐方式一】。
🌼1. 方式一:操作宝塔面板
🌊域名绑定服务器端口
【登录宝塔面板】->网站->添加站点
按照红框内容输入自己的域名
设置->配置文件->删除红框内容
红框内容为:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
红框删除后加入下面代码,修改成自己的网站占用端口号->点击保存
location / {
proxy_pass http://127.0.0.1:端口号;
proxy_connect_timeout 12000s;
proxy_read_timeout 12000s;
proxy_send_timeout 12000s;
proxy_buffering off;
}
后续登录主机的域名即可访问成功!
【错误记录】上述步骤没问题则略过
解决方案:点击修复完,刷新页面即可。
🌊领取免费的SSL证书
提示,虽然显示SSL证书到期88天,但是它会自动续签
🌼2. 方式二:修改nginx文件
🌊领取免费的SSL证书
注意:该方式需要手动修改nginx配置文件
操作步骤:
1. 打开阿里云->搜索数字证书管理服务->购买SSL免费证书
2. 创建SSL免费证书
3. 域名添加解析【在阿里云购买的域名会自动添加DNS解析】->创建证书文件夹,将Nginx下载到文件夹中,解压即可。
1. 打开阿里云->搜索数字证书管理服务->购买SSL免费证书
购买SSL免费证书
2. 创建SSL免费证书
3. 域名添加解析【在阿里云购买的域名会自动添加DNS解析】,其他网站购买的域名需要手动添加下域名解析【添加主机记录、记录类型、记录值】
创建证书文件夹,将Nginx下载到文件夹中,解压即可。
下载&配置nginx传送门
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解-CSDN博客
安装vim编辑器:
centos:
yum install vim
ubuntu:
apt install vim
打开Xftp,连接进入找到nginx并进入,将下载的两个ssl文件copy进去。
⑧:修改nginx.conf配置文件
#进入nginx
cd /etc/nginx/
查看里面有没有nginx.conf文件
ls
centos:
vim nginx.conf
ubuntu:
cd /etc/nginx/sites-available/your文件
然后vi newfile,将default文件内容拷过去。
替换代码 按键盘上的a,进入编辑模式
a
用键盘上的↑↓← →键移动光标!
将上图红框里的代码删掉,换成下面的代码
请将域名换成你们自己的域名,SSL证书也换成你们自己的
proxy_buffering off;
upstream chatgpt-web {
server 127.0.0.1:1002 weight=1;# 1002是端口号
}
server {
listen 80;
server_name www.替换的域名 替换的域名;
return 301 https://www.域名$request_uri;
# 上面的return语句和下面的location语句二选一即可
#location / {
# rewrite ^(.*)$ https://www.替换的域名;
#}
}
server {
listen 443 ssl;
server_name www.替换的域名;
ssl_certificate /etc/nginx/替换的SSL证书.pem;
ssl_certificate_key /etc/nginx/替换的SSL证书秘钥.key;
location / {
proxy_pass http://chatgpt-web;
}
}
源码分析:
逐行分析这段Nginx配置文件:
proxy_buffering off;
关闭代理缓冲,即禁用对上游服务器响应的缓冲。
upstream chatgpt-web { ... }
: 定义一个名为chatgpt-web
的上游服务器,指向本地IP为 127.0.0.1,端口为 1002。weight=1
表示权重为1,即该服务器被选中的概率为1。
server { ... }
: 第一个server
块,监听端口 80(HTTP请求):
server_name www.替换的域名 替换的域名;
: 指定服务器名,这里似乎有一处错误,应该替换为实际的域名。return 301 https://www.sarpro.cn$request_uri;
: 所有HTTP请求都将被重定向到相同的URL,但使用 HTTPS 协议。下面注释的部分是另一种实现重定向的方式,通过rewrite
语句。
server { ... }
: 第二个server
块,监听端口 443(HTTPS请求):
server_name www.替换的域名;
: 指定服务器名,同样应该替换为实际的域名。ssl_certificate
和ssl_certificate_key
: 分别指定 SSL 证书和私钥的路径。location / { ... }
: 针对所有请求的位置块,通过proxy_pass
将请求代理到之前定义的上游服务器chatgpt-web
。总体而言,这个配置文件的目标是将所有对
www.sarpro.cn
的请求通过 HTTPS 代理到本地的 1002 端口上游服务器。
上述可替换语句的区别
rewrite ^(.*)$ https://www.sarpro.cn;
和return 301 https://www.sarpro.cn$request_uri;
这两个语句在Nginx配置中执行的是重定向,但它们的行为略有不同:
rewrite ^(.*)$ https://www.sarpro.cn;
- 这个语句使用
rewrite
指令将所有的请求重写到https://www.sarpro.cn
。这意味着无论原始请求的路径是什么,都会被重写为https://www.sarpro.cn
。例如,http://sarpro.cn/some/path
会被重写为https://www.sarpro.cn
,丢失了原始路径信息。
return 301 https://www.sarpro.cn$request_uri;
这个语句使用
return
指令执行一个永久性(301)重定向,并保留了原始请求的路径信息。$ request_uri
是Nginx变量,它包含了原始请求中的URI(路径和查询字符串)。因此,这个语句会将请求重定向到https://www.sarpro.cn
,但保留了原始请求中的路径信息。例如,http://sarpro.cn/some/path
会被重定向为https://www.sarpro.cn/some/path
。
鼠标中间粘贴 修改完,按ESC键保存并退出编辑模式
然后输入命令,敲回车
:wq!
检查
nginx -t
出现这个即成功!
执行这个脚本
systemctl start nginx
systemctl status nginx
当出现active (running)… 即说明安装成功
如果这里没有显示active (running)…遇到问题请参考文章传送门:
【nginx】nginx启动显示80端口占用问题的解决方案-CSDN博客
然后再执行这条命令(必须要输入这个条命令再输入下面的命令)
systemctl enable docker
如果不想后续网站打不开,就一定要执行这条命令:
systemctl restart nginx
🌊域名绑定服务器端口
🍀a. 【二级域名进行绑定】
比如让chat1.sarpro.cn指向服务器端口1002,而让chat2.sarpro.cn指向同一服务器端口1008。
操作步骤:
1. 域名解析添加记录
2. 在
/etc/nginx/sites-available/
目录中,可以创建一个新的配置文件,例如chat
,然后在sites-enabled
目录中创建符号链接,将其链接到sites-available
目录中的配置文件。以下是具体步骤:
1. 创建新的配置文件 /etc/nginx/sites-available/chat
:
server {
listen 80;
server_name chat1.sarpro.cn;
location / {
proxy_pass http://127.0.0.1:1002; # 将请求代理到端口 1002
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;
}
}
server {
listen 80;
server_name chat2.sarpro.cn;
location / {
proxy_pass http://127.0.0.1:1008; # 将请求代理到端口 1008
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;
}
}
2. 创建符号链接:
sudo ln -s /etc/nginx/sites-available/chat /etc/nginx/sites-enabled/
3. 验证 Nginx 配置是否正确:
sudo nginx -t
如果没有错误,重新加载 Nginx:
sudo systemctl reload nginx
🍀b. 【一级域名的不同路径进行绑定】
要将不同的路径分别映射到不同的端口,比如:将sarpro.cn/chat1连接到当前服务器的1002端口,将sarpro.cn/chat2连接到当前服务器的2023端口
可以在Nginx配置文件中使用
location
块和proxy_pass
指令。以下是一个示例配置:
proxy_buffering off;
upstream chatgpt-web-1002 {
server 127.0.0.1:1002 weight=1; #修改成自己的端口
}
upstream chatgpt-web-2023 {
server 127.0.0.1:2023 weight=1;
}
server {
listen 80;
server_name www.域名 域名;
location / { #必须要有,否则跳转不了
proxy_pass http://chatgpt-web-1002/; #末尾的/有时候必须要有
}
location /chat1{
proxy_pass http://chatgpt-web-1002/;
}
location /chat2 {
proxy_pass http://chatgpt-web-2023/;
}
return 301 https://www.sarpro.cn$request_uri;
}
server {
listen 443 ssl;
server_name 域名;
ssl_certificate /etc/nginx/XXX.pem; #修改成自己的SSL证书下载的nginx
ssl_certificate_key /etc/nginx/XXX.key; #修改成自己的SSL证书下载的nginx
location / {
proxy_pass http://chatgpt-web-1002/;
}
location /chat1 {
proxy_pass http://chatgpt-web-1002/;
}
location /chat2 {
proxy_pass http://chatgpt-web-2023/;
}
}
源码分析
以下是对你提供的Nginx配置的逐行详细分析:
proxy_buffering off;
: 关闭代理缓冲,确保实时性,不缓冲代理的响应。
upstream chatgpt-web { ... }
: 定义一个名为chatgpt-web
的上游服务器块,指定了一个服务器127.0.0.1:1002
,并设置了权重为1。
upstream chatgpt-web-2023 { ... }
: 定义另一个名为chatgpt-web-2023
的上游服务器块,指定了服务器127.0.0.1:2023
,并同样设置了权重为1。
server { ... }
块(监听端口80,即HTTP请求):
listen 80;
: 监听端口80,处理HTTP请求。server_name www.sarpro.cn sarpro.cn;
: 指定了两个服务器名,分别是带有www前缀和没有www前缀的域名。location /chat1 { ... }
和location /chat2 { ... }
: 分别定义了两个位置块,将请求路径为/chat1
的请求代理到chatgpt-web
上游服务器,将路径为/chat2
的请求代理到chatgpt-web-2023
上游服务器。return 301 https://$host$request_uri;
: 对于所有其他请求,执行301重定向到相同的URL,但使用HTTPS协议。
server { ... }
块(监听端口443,即HTTPS请求):
listen 443 ssl;
: 监听端口443,处理HTTPS请求。server_name www.sarpro.cn;
: 指定了服务器名,确保只有带有www前缀的域名能够使用HTTPS访问。ssl_certificate
和ssl_certificate_key
: 分别指定SSL证书和私钥的路径。location /chat1 { ... }
和location /chat2 { ... }
: 同样定义了两个位置块,将请求路径为/chat1
的请求代理到chatgpt-web
上游服务器,将路径为/chat2
的请求代理到chatgpt-web-2023
上游服务器。总体而言,这个配置用于将不同路径的请求代理到不同的上游服务器,并在端口80上执行HTTP到HTTPS的重定向。确保你替换SSL证书和私钥的路径,并确保上游服务器正常运行,即
127.0.0.1:1002
和127.0.0.1:2023
。
-
代码段一:
location / { proxy_pass http://chatgpt-web; }
这个代码段配置了一个反向代理,将所有
/
路径的请求代理到名为chatgpt-web
的上游服务器。这意味着Nginx会将这些请求传递给chatgpt-web
,并将响应返回给客户端。这通常用于将请求转发到后端应用程序服务器。 -
代码段二:
location / { return 301 https://www.sarpro.cn$request_uri; }
这个代码段配置了一个HTTP 301永久重定向,将所有
/
路径的请求重定向到https://www.sarpro.cn
。这意味着所有请求都将被重定向到指定的URL,客户端将在浏览器中看到301状态码,并从新的URL获取响应。
总体而言,这两段代码的目的完全不同。第一段用于反向代理请求,而第二段用于执行重定向操作。选择使用哪一个取决于你的需求和目标。
重新加载Nginx配置:
检查
nginx -t
出现这个即成功
执行这个脚本
systemctl start nginx
systemctl status nginx
当出现active (running)… 即说明安装成功
然后再执行这条命令(视频没讲,这是新加进去的,必须要输入这个条命令在输入下面的命令)
systemctl enable docker
如果不想后续网站打不开,就一定要执行这条命令
再输入下面指令即可:
systemctl restart nginx