文讨论,如何对目录自动加/
第一步,打开conf的配置文件
第二步 监听8082端口,配置server_name localhost;内容
root查html目录,index搜索其中的index.html文件
server块 {
listen 8082;
server_name localhost;
location /heima {
root html;
index index.html;
}
}
第三步:这里出现了404的错误,错误的原因是因为文件资源寻找需要到 /heima目录下的 html文件的index.html文件,现在没有,找不到出错了
第四步 切换到html页面,创建heima文件,切换,利用>将内容装进去
第五步 利用cat可以查看index.html页面的内容
带个/和不带/的区别是什么?
把/去掉之后,它发送的请求有两个,一个是301短期重定向,一个是200永久重定向
但如果是访问的/访问的路径,最终只有一个请求,就是200
分析:
如果不加斜杠,Nginx服务器内部会自动做一个301的重定向,重定向的地址会有一个指令叫server_name_in_redirec onloff;来决定重定向的地址:
如果该指令为on 重定向的地址为: http://server_name/目录名/;
如果该指令为off 重定向的地址为: http://原URL中的域名/目录名/;
这句话什么意思?
如果把server_name_in_redirec 设置成了on 路径就会变为了http://localhost:8082/heima/这个路径,会变成localhost
端口未提供服务,就会报错
所以就拿刚才的地址来说, http://192.168.200.133/hm如果不加斜杠, 那么按照上述规则,如果指令server_name_in_redirect为on,则301重 定向地址变为 http://localhost/hm/,如果为off,则301重定向地址变为 ttp://192.168.200.133/ht/。后面这个是正常的,前面地址就有问题。
注意server_name_in_redirect指令在Nginx的0.8.48版本之前默认都是 on,之后改成了off,所以现在我们这个版本不需要考虑这个问题,但是 如果是0.8.48以前的版本并且server_name_in_redirect设置为on,我们 如何通过rewrite来解决这个问题?
手动给他改一下,第一步,切换到conf文件下,vim打开配置文件
手动配置,在server_name_in_redirect on中进行打开
打开之后就会出现一个明显的问题,带/就能够正常访问
不带/就不能够正常访问,就转圈圈了,因为它最终会把自己的服务重定向到localhost/heima/
这种情况,主要适用于,目录加/的情况,如果访问的是一个html页面,真实在使用的情况中,只有添加了目录,才最好加/
$host就是自己设置的主机IP,$server_port获取的是8082,加上下面if这句话的意思是主要判断,
index.html,设置的是一个页面,不发生映射跳转
如果是永久重定向,用permanent进行设置
测试经过 192.168.200.133:8082/heima/ 这种带/最终返回了200状态码
如果不带/,会发送一个302和200的状态码,同时下面的内容也多了一个/
为什么多了一个/,原因是下面的在匹配的时候,已经匹配了/,所以在URL重定向的路径多了一个/,解决多了/的方法是
将server_port后面/去掉,直接加上就好了
最终//的内容消失不见了
记录10】华为云耀云服务器L实例-使用Docker拉取nginx镜像的部署示例
Docker 是一个开源平台,用于开发、运输和运行应用程序。它使用容器化技术来包装应用程序及其依赖项,以便在任何环境中都能一致地运行。简单来说,Docker 可以将应用程序及其所有依赖项打包成一个容器,这样就可以确保它无论在哪里运行都表现一致。
### Docker 的主要组件:
1. **Docker Engine**:核心组件,负责创建和运行容器。
2. **Docker Image**:一个轻量级、独立的可执行软件包,包含运行应用所需的所有内容——代码、运行时、库、环境变量和配置文件。
3. **Docker Container**:Docker 图像的运行实例。容器是隔离的环境,其中运行应用程序和其依赖项。
4. **Docker Hub**:一个公共的图像注册中心,你可以从中拉取图像或推送自己的图像。
5. **Docker Compose**:一个用于定义和运行多容器 Docker 应用程序的工具。
6. **Docker Swarm/Kubernetes**:用于容器编排和集群管理的工具。
### Docker 的主要优点:
1. **一致性**:由于应用程序和所有依赖项都被打包在同一个容器中,你可以确保应用程序在不同环境中的行为是一致的。
2. **可移植性**:你可以在任何支持 Docker 的系统上运行 Docker 容器,无论是本地机器、数据中心还是云服务。
3. **易于管理**:Docker 提供了强大的命令行和图形界面工具,用于管理容器的生命周期。
4. **隔离性**:每个容器都在其自己的隔离环境中运行,这增加了应用程序的安全性和可靠性。
5. **微服务架构**:Docker 非常适合微服务架构,因为你可以为每个服务创建一个单独的容器。
### 常见用途:
- **开发和测试**:开发人员可以在本地机器上使用与生产环境相同的容器进行开发和测试。
- **持续集成和持续部署(CI/CD)**:自动化构建、测试和部署应用程序。
- **应用程序部署**:在单个服务器或跨多个服务器的集群中部署应用程序。
- **服务编排**:使用工具如 Docker Swarm 或 Knubernetes 自动管理多个容器。
Nginx(发音为 "Engine-X")是一个开源的、高性能的 HTTP 和反向代理服务器,也可以用作 IMAP/POP3/SMTP 代理服务器。它是由 Igor Sysoev 开发的,最初发布于 2004 年。Nginx 旨在提供低内存占用和高并发性,因此它通常用于服务高流量的网站和应用。
### Nginx 的主要特点:
1. **高性能和高并发**: Nginx 能够处理数以千计的并发连接,这主要得益于其基于事件的架构。
2. **反向代理**: Nginx 可以作为反向代理服务器,将客户端请求转发到后端服务器,并将后端服务器的响应返回给客户端。
3. **负载均衡**: Nginx 可以分发进入的客户端请求到多个后端服务器,以实现负载均衡。
4. **静态文件服务**: Nginx 非常擅长于快速地提供静态资源,如 HTML、CSS、JavaScript 和图像文件。
5. **缓存**: Nginx 提供了灵活的缓存机制,可以缓存来自后端服务器的响应。
6. **安全**: 提供 SSL/TLS 支持,还有其他一些安全特性,如 HTTP 基础认证、IP 黑名单等。
7. **灵活的配置**: Nginx 的配置文件格式相对简单,易于理解和维护。
8. **扩展性**: Nginx 支持各种第三方模块,以增加更多功能。
### 常见用途:
- **Web 服务器**: 托管网站和 web 应用。
- **API 网关**: 处理 API 请求并将其路由到适当的后端服务。
- **CDN 边缘节点**: 作为内容分发网络的一部分。
- **流媒体服务器**: 提供视频流和其他媒体内容。
本篇中,我们将完成Docker在华为云服务器上的部署,并完成nginx镜像的拉取。
当然,Docker 是一个非常强大的工具,它可以用于容器化应用和服务。以下是一些在 CentOS 上使用 Docker 的基础示例。
### 安装 Docker
1. **更新软件包索引**:
```bash
sudo yum update -y
```
2. **安装 Docker**:
```bash
sudo yum install docker -y
```
(在此前我已安装过,故没有显示安装过程)
3. **启动 Docker 服务**:
```bash
sudo systemctl start docker
```
4. **设置 Docker 开机自启**:
```bash
sudo systemctl enable docker
```
### 使用 Docker
1. **拉取一个镜像**(以 nginx 为例):
```bash
sudo docker pull nginx
```
2. **运行一个容器**:
```bash
sudo docker run -d -p 8080:80 nginx
```
这将运行一个 nginx 容器,并将其 80 端口映射到主机的 8080 端口。
出现以上提示时,表示已经成功地运行了一个 Nginx 容器,并将容器的 80 端口映射到了主机的 8080 端口。通过访问 http://[你的服务器IP地址]:8080 来看到 Nginx 的默认欢迎页面。
3. **查看运行中的容器**:
```bash
sudo docker ps
```
4.**查看本地镜像**:
```bash
sudo docker images
```
到此为止,我们已经成功完成了Docker容器在华为云耀云服务器L实例上的部署,并完成了nignx镜像的拉取。Docker 的这些特性和优点使其成为现代软件开发和运维的重要工具,而Nginx 在互联网公司、大型企业和个人开发者中都非常受欢迎,因为它既稳定又高效。它是许多高流量网站背后的关键组件,包括 Netflix、Hulu、GitHub、Dropbox 等。
使用华为云耀云服务器L实例部署docker,我们在强大而稳定的服务基础上,获得了一个支持更高效的现代软件开发运维的云环境,这为我们部署更多项目奠定了坚实的基础、提供了强大的支撑。
着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!
虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的!
openssl genrsa -des3 -out blog.key 2048
openssl rsa -in blog.key -out blog_nopass.key
openssl req -new -key blog.key -out blog.csr
Enter pass phrase for blog.key:
-----
Country Name (2 letter code) [XX]:CN # 国家代码
State or Province Name (full name) []:jiangsu # 省份
Locality Name (eg, city) [Default City]:jiangsu # 城市
Organization Name (eg, company) [Default Company Ltd]:macrozheng # 机构名称
Organizational Unit Name (eg, section) []:dev # 单位名称
Common Name (eg, your name or your server's hostname) []:blog.macrozheng.com # 网站域名
Email Address []:macrozheng@qq.com # 邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # 私钥保护密码,可以不输入直接回车
An optional company name []: # 可选公司名称,可以不输入直接回车
openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt
SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!
docker pull nginx:1.10
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.10
docker container cp nginx:/etc/nginx /mydata/nginx/
mv /mydata/nginx/nginx /mydata/nginx/conf
docker stop nginx
docker rm nginx
docker run -p 80:80 -p 443:443 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
cp blog_nopass.key /mydata/nginx/html/ssl/
cp blog.crt /mydata/nginx/html/ssl/
server {
listen 80; # 同时支持HTTP
listen 443 ssl; # 添加HTTPS支持
server_name blog.macrozheng.com;
#SSL配置
ssl_certificate /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书
ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog_nopass.key; # 配置证书私钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法
ssl_prefer_server_ciphers on; # 优先采取服务器算法
ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小
ssl_session_timeout 10m; # 配置会话超时时间
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
location /admin {
alias /usr/share/nginx/html/admin;
index index.html index.htm;
}
location /app {
alias /usr/share/nginx/html/app;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 80; # 同时支持HTTP
listen 443 ssl; # 添加HTTPS支持
server_name api.macrozheng.com; #修改域名
#ssl配置
ssl_certificate /usr/share/nginx/html/ssl/api/api.crt; # 配置证书
ssl_certificate_key /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置证书私钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on; # 优先采取服务器算法
ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小
ssl_session_timeout 10m; # 配置会话超时时间
location / {
proxy_pass http://192.168.3.101:8080; # 设置代理服务访问地址
proxy_set_header Host $http_host; # 设置客户端真实的域名(包括端口号)
proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP
proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。
blog.macrozheng.com.key # 证书私钥文件
blog.macrozheng.com.pem # 证书文件
#SSL配置
ssl_certificate /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.pem; # 配置证书
ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.key; # 配置证书私钥
*请认真填写需求信息,我们会在24小时内与您取得联系。