整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Nginx的rewrite案例之目錄自動添加斜杠

          文討論,如何對目錄自動加/

          第一步,打開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自簽名證書

          雖然自簽名證書瀏覽器認為并不是安全的,但是學習下SSL證書的生成還是很有必要的!

          • 首先創建SSL證書私鑰,期間需要輸入兩次用戶名和密碼,生成文件為blog.key
          openssl genrsa -des3 -out blog.key 2048
          
          • 利用私鑰生成一個不需要輸入密碼的密鑰文件,生成文件為blog_nopass.key
          openssl rsa -in blog.key -out blog_nopass.key
          
          • 創建SSL證書簽名請求文件,生成SSL證書時需要使用到,生成文件為blog.csr
          openssl req -new -key blog.key -out blog.csr
          
          • 在生成過程中,我們需要輸入一些信息,需要注意的是Common Name需要和網站域名一致;
          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 []:                                                 # 可選公司名稱,可以不輸入直接回車
          
          • 生成SSL證書,有效期為365天,生成文件為blog.crt
          openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt
          
          • 其實最終有用的文件是兩個,一個是證書文件blog.crt,另一個是不需要輸入密碼的證書私鑰文件blog_nopass.key

          Nginx支持HTTPS

          SSL證書生成好了,接下來我們就可以配置Nginx來支持HTTPS了!

          安裝Nginx

          • 我們還是使用在Docker容器中安裝Nginx的方式,先下載Nginx的Docker鏡像;
          docker pull nginx:1.10
          
          • 下載完成后先運行一次Nginx,由于之后我們要把宿主機的Nginx配置文件映射到Docker容器中去,運行一次方便我們拷貝默認配置;
          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
          
          • 運行成功后將容器中的Nginx配置目錄拷貝到宿主機上去;
          docker container cp nginx:/etc/nginx /mydata/nginx/
          
          • 將宿主機上的nginx目錄改名為conf,要不然/mydata/nginx/nginx這個配置文件目錄看著有點別扭;
          mv /mydata/nginx/nginx /mydata/nginx/conf
          
          • 創建的Nginx容器復制完配置后就沒用了,停止并刪除容器;
          docker stop nginx
          docker rm nginx
          
          • 使用Docker命令重新啟動Nginx服務,需要映射好配置文件,由于我們要支持HTTPS,還需要開放443端口。
          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
          

          配置支持HTTPS

          • 將我們生成好的SSL證書和私鑰拷貝到Nginx的html/ssl目錄下;
          cp blog_nopass.key /mydata/nginx/html/ssl/
          cp blog.crt /mydata/nginx/html/ssl/
          
          • 接下來我們需要給blog.macrozheng.com這個域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/目錄下添加Nginx配置文件blog.conf,配置文件內容如下;
          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;
              }
          }
          
          • 通過HTTPS訪問blog.macrozheng.com這個域名,由于我們使用的是自己簽名的SSL證書,瀏覽器會提示您的連接不是私密連接,點擊繼續前往可以通過HTTPS正常訪問;


          • 我們可以查看下證書的頒發者信息,可以發現正好是之前我們創建SSL證書簽名請求文件時錄入的信息;


          • 接下來我們需要給api.macrozheng.com這個域名添加HTTPS支持,通過這個域名可以使用HTTPS訪問我們的SpringBoot應用,api.crtapi_nopass.key文件需要自行生成,在/mydata/nginx/conf/conf.d/目錄下添加Nginx配置文件api.conf,配置文件內容如下;
          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;
              }
          }
          
          • 通過HTTPS訪問api.macrozheng.com這個域名,訪問地址為:https://api.macrozheng.com/swagger-ui.html


          • 任意調用一個接口測試下,比如說登錄接口,可以發現已經可以通過HTTPS正常訪問SpringBoot應用提供的接口。


          使用受信任的證書

          之前我們使用的是自簽名的SSL證書,對于瀏覽器來說是無效的。使用權威機構頒發的SSL證書瀏覽器才會認為是有效的,這里給大家推薦兩種申請免費SSL證書的方法,一種是從阿里云申請,另一種是從FreeSSL申請。

          阿里云證書

          • 阿里云上可以申請的免費證書目前只有支持單個域名的DV級SSL證書。比如說你有blog.macrozheng.comapi.macrozheng.com兩個二級域名需要使用HTTPS,就需要申請兩個SSL證書。


          • 申請成功后點擊下載Nginx證書即可;


          • 下載完成后解壓會有下面兩個文件;
          blog.macrozheng.com.key # 證書私鑰文件
          blog.macrozheng.com.pem # 證書文件
          
          • 拷貝證書文件到Nginx的指定目錄下,然后修改配置文件blog.conf,只要修改證書配置路徑即可,修改完成后重啟Nginx;
          #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; # 配置證書私鑰
          
          • 再次通過HTTPS訪問blog.macrozheng.com這個域名,發現證書已經有效了,連接也是安全的了。


          FreeSSL證書

          • 如果你有使用通配符域名的需求,可以上FreeSSL申請SSL證書,不過免費的有效期只有3個月,這就意味著你過3個月就要重新申請一次了。


          • 附上官網地址:https://freessl.cn/

          使用acme.sh自動申請證書

          • acme.sh腳本實現了acme協議, 可以從letsencrypt生成免費的證書。一般我們申請的證書有效期都是1年,過期就要重新申請了,使用acme.sh腳本可以實現到期自動申請,再也不用擔心證書過期了!


          • 附上官網地址:https://github.com/acmesh-official/acme.sh

          主站蜘蛛池模板: 精品一区二区视频在线观看| 国产色情一区二区三区在线播放| 日韩欧美一区二区三区免费观看| 国产激情一区二区三区小说| 熟女大屁股白浆一区二区| 亚洲av成人一区二区三区观看在线| 久久亚洲中文字幕精品一区四| 成人精品视频一区二区| 91无码人妻精品一区二区三区L| 精品国产一区二区22| 日韩一区二区三区在线观看| 无码aⅴ精品一区二区三区| 亚洲av无码成人影院一区| 亚洲欧美国产国产一区二区三区| 一区二区三区四区免费视频 | 国产一区二区免费在线| 免费看AV毛片一区二区三区| 国产日产久久高清欧美一区| 国产一区二区在线观看| 一区一区三区产品乱码| 精品久久久久久无码中文字幕一区| 亚洲一区二区三区久久久久| 一区二区三区无码被窝影院| 国产一区二区在线观看| 国产一区二区三区在线观看免费| 国产一区二区三区无码免费 | 久久久久99人妻一区二区三区| 99国产精品一区二区| 亚洲AV成人一区二区三区AV| 一区二区三区日韩精品| 亚洲高清一区二区三区 | 香蕉免费一区二区三区| 末成年女AV片一区二区| 中文字幕无线码一区二区| 激情久久av一区av二区av三区| 国产一区二区好的精华液| 亚洲熟妇无码一区二区三区导航 | 久久91精品国产一区二区| 任你躁国语自产一区在| 色综合久久一区二区三区| 精品一区二区三区高清免费观看|