文討論,如何對目錄自動加/
第一步,打開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小時內與您取得聯系。