centOS6 安裝 nginx、安裝 SSL 憑證、進行反向代理、發布網頁

內容說明

記錄我在 linux 上學習安裝 nginx 以及反向代理 https to http時遇到的困難,自學真的好麻煩呀 QQ
教學示範作業系統 centOS6

centOS6 如何安裝 nginx

  • 安裝依賴套件 sudo yum install epel-release
  • 安裝 nginx sudo yum install nginx

nginx 安裝 ssl 憑證

我們先產生出 ssl 憑證,這邊我則是在 godaddy 的 ssl 憑證中下載 crt and key。
先對 url 進行 ssl 檢查,來確定 ssl 是否正確

複製好 crt 之後,我們先透過網頁進行 crt 檢查,如果檢查成功就沒問題啦

檢查 ok 示意圖

如果沒有成功比對可以試試看文本比較器,來找出哪些有錯誤。

也可以在 linux 進行檢查

  • 檢查 csr openssl req -text -noout -verify -in CSR.csr
  • 檢查 key openssl rsa -in privateKey.key -check
  • 檢查 crt openssl x509 -in certificate.crt -text -noout
  • 然後再 sudo vim /etc/nginx/conf.d/ssl.conf 加入紅筆中的這些

發布網頁

  • 首先我們有一個資料夾,存放要 show 給全部人的資料,例如 index.html….。
  • 檢查網域位置
    • 我們可以進去 sudo vim /etc/nginx/conf.d/ssl.conf,可以看到 root 的位置在 /usr/share/nginx/html

    • 因此當我們打 https://localhost 時是進到 /usr/share/nginx/html 這個資料夾
    • 再來我們如果打 https://localhost/david 時是進到 /usr/share/nginx/html/david 這個資料夾
    • 如果沒有這個資料夾 /usr/share/nginx/html/david ,這時 nginx 會判斷下面你的 local 是否有此網域,如果有就轉過去,沒有就輸出 404。
  • 修改網域位置
    • 假如我們有個網域位置在 /home/david/public_html,我們想讓 https://localhost 指到此網域
    • 那我們針對 sudo vim /etc/nginx/conf.d/ssl.conf 修改,修改如下
      • 將 root 進行註解

      • 增加 location,並且預設如果指到資料夾位置時,會自動開啟 index.html、index.php

  • 啟動 nginx 輸入 sudo service nginx start
  • 這樣你再輸入 https://localhost,則會打開 /home/david/public_html/index.html,前提是你資料夾下必須有此檔案拉XD。

權限問題 forbidden (13: Permission denied)、靜態網頁 403 forbidden

靜態網頁 405 Not Allow,且靜態網頁有使用 POST request

  • 問題描述
    • 在一些靜態網頁中有使用 POST request,我們的 nginx 會跳出 405 Not Allow,此時該怎麼辦比較好呢?
  • 解決方法
    • 使用 hack 技巧XD。
    • 由於絕大多數的 web server(Apache、IIS、nginx) 都不允許靜態網頁使用 POST request,因此我們這邊的做法是當 nginx 要將頁面轉為 405 時,我們再轉回來當前網址,如此一來就可以使用 POST 了!
    • 解決方法如下,修改 sudo vim /etc/nginx/conf.d/ssl.conf,在最後加入這行指令

    • 之後 啟動 nginx 輸入 sudo service nginx restart
  • 參考連結

開始進行反向代理

  • 先對那文件進行編輯 sudo vim /etc/nginx/conf.d/ssl.conf
  • location + /url/,就是我們 https://example.com/url/
  • proxy_pass api,就是我們要請 nginx 將 http 代理成 https,讓外網透過 https 連入 http api

  • 加入 upstream 綠色區塊,然後 server 那邊放入我們需要的 api

啟動 nginx

輸入語法,不過需要記住 nginx 需要分號,剛剛在打的時候要注意分號優 sudo service nginx start

啟動 nginx 錯誤: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

錯誤圖片如下

通常這時後要怎麼辦呢?

有一種處理方式是將 443/tcp 全部清除後,再重新開啟一次 nginx 就可以順利完成

1
2
sudo fuser -k 443/tcp
service nginx restart

參考連結

nginx - nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) by stackoverflow

nginx 如何開啟 Cross-Origin Resource Sharing (CORS)

在一些服務上,有時候必須開啟 CORS 服務,通常 nginx 預設是關閉,那要怎麼打開比較好呢?

  • 打開 sudo vim /etc/nginx/conf.d/ssl.conf
  • location 加入 add_header Access-Control-Allow-Origin *;
  • 示意圖如下:

CORS(跨來源資源共享) 是甚麼?

  • 平常 API 中 CORS 預設為關閉,因此瀏覽器中你的 domain(網域) 資源只能在你的 domain 下使用,其他 domain 都不行。
  • 當 CORS 開啟,則你的 domain 資源則可以在任意地方做使用。

舉個例子:
現在你要在你的 blog 放入一張 FB 的圖片。

為甚麼會需要 CORS 通常會關閉呢? 我們把放入 FB(https://www.facebook.com/) 的圖片稍微改下
現在你要在你的 blog 放入一張 FB(https://www.facebook.com/) 的私人訊息。

由於我們要保護我們的資料並不被惡意擷取,因此就產生了 CORS(跨來源資源共享),願意共享才能共享。

參考連結

How do I add Access-Control-Allow-Origin in NGINX? by stackexchange
跨來源資源共用(CORS) by MDN

參考連結

How To Install nginx on CentOS 6 with yum by digitalocean
SSL Checker by sslshopper
crt check by sslshopper
[ DevOps ] Nginx 設定 Proxy Server 及 Load balance by oranwind
Nginx 設定 SSL 網頁加密 by opencli
Ubuntu Nginx 設定HTTPS建立網頁加密連線 (Godaddy SSL憑證) by junhanli
4562605504:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE by stackexchange

心得

好棒! 我終於把它寫出來了 centOS6 真的好難用QQQ,花了花多時間去把它學習,從不了解反向代理到理解反向代理,然後得知 ssl 是必須要去申請憑證,而非做一個假的 ssl 上線就可以讓 nginx 變成 https。

之後找到 nginx 管理 https,原本是使用 redirect 307 發現會出現錯誤為 https 中有 http,再來使用 proxy_pass 成功代理了。

一路上都是心血與痛苦,也謝謝網路上的大大願意寫 blog 分享資源,謝謝各位。

現在目前比較傾向將錯誤寫在安裝的 blog 日誌上而非在創新的日誌來寫,不知道這樣會不會幫助到大家與我。

目前也還在嘗試,還在努力,好希望可以成功。

紀錄

記錄我在採坑時,用到的那些 linux 指令,也許對未來的我或讀者有幫助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 vim /etc/httpd/conf/httpd.conf
service httpd restart

MEU8UD3PE67H57U6BLOEPLOZK8DGLLX9

openssl req -new -newkey rsa:2048 -nodes -keyout arch-backend.com/.key -out arch-backend.com/.csr

sudo service nginx restart

sudo vim /etc/nginx/conf.d/ssl.conf
sudo fuser -k 443/tcp

ssl_certificate /etc/ssl/certs/nginx-ssl.crt;
ssl_certificate /etc/ssl/certs/web.crt;
ssl_certificate_key /etc/ssl/private/nginx-ssl.key;
ssl_certificate_key /etc/ssl/private/web.key;

openssl x509 -in /etc/ssl/certs/nginx-ssl.crt -text -noout


openssl x509 -in /etc/ssl/certs/web.crt -text -noout
openssl x509 -in /etc/ssl/certs/nginx-ssl.crt -text -noout

openssl rsa -in /etc/ssl/private/web.key -check
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: