Nginx+uwsgi+ssl配置https

来源:https://www.cnblogs.com/zmdComeOn/archive/2020/06/26/13195361.html
-Advertisement-
Play Games

使用原始django,太過於笨重和雜多nginx是一個輕量級的web伺服器,在處理靜態資源和高併發有優勢uwsgi是一個基於python的高效率的協議,處理後端和動態網頁有優勢所以這裡採用靜態網頁交給nginx解析,動態網頁交給uwsgi解析,並且nginx配置ssl,即可以使用出高安全,高效率的部 ...


使用原始django,太過於笨重和雜多
nginx是一個輕量級的web伺服器,在處理靜態資源和高併發有優勢
uwsgi是一個基於python的高效率的協議,處理後端和動態網頁有優勢
所以這裡採用靜態網頁交給nginx解析,動態網頁交給uwsgi解析,並且nginx配置ssl,即可以使用出高安全,高效率的部署。

步驟

我這裡使用的是Ubuntu18.04版本,伺服器在阿裡雲
沒用centos的原因是Ubuntu我用的更順手

1.在Ubuntu上安裝Django生產環境
python3.6 django3 mysql5.7 nginx uwsgi

這裡安裝就落入了第一個坑,Ubuntu系統帶了好多python和pip工具,很亂。
我先按照python3.8----->修改pip3指定的編譯器,將python3.6改成python3.8
從官網安裝MySQL----->下載官網的deb包------>dpkg一下這個包------->系統update------>系統獲取安裝mysql8。
安裝virtualenv和virtualenvwrapper。windows上面習慣了用這兩個包,linux上自然也安上,但後面卻報錯了,很無奈,只能再刪除掉,等會你就懂了
pip安裝django uwsgi,sudo apt 安裝nginx。這步我覺得是這一天里最簡單的
pip安裝mysql依賴包 mysqlclient。這步真的是酸辛淚,一上午全費到這裡了。我這裡是在virtualenv虛擬環境中進行安裝的。但,它就是報錯,哪怕我百度之後,安裝了再多的系統依賴包,它還是報錯。等我絕望的時候,退出虛擬環境,在本來的編譯器中試了一下pip3 install mysqlclient,結果缺成功了,就很絕望。想著是不是外面的pip list裡面有可能這個的依賴包?然後我把pip list所有的包記下來,再進虛擬環境按一遍,之後再安裝mysqlclient,結果還是報錯。絕望。只能刪除了virtualenv,然後把mysqlclient安裝到了外面的環境(至於為什麼這裡不用pip freeze ->去安裝,我原環境在windows,ubuntu裡面還有好多都有的包,網上沒用,這樣一回推安裝就報錯,很絕望。)
2.測試一下這些包都有沒有問題
先生成資料庫遷移文件,makemigrations 之後遷移migrate 成功
先測試django,直接runserver manage, 測試url, 成功訪問
再測試nginx,打開服務,直接訪問ip。成功訪問到
測試uwsgi,現在項目文件夾里寫一個xxx.ini,內容如下

[uwsgi]
#項目根目錄,要絕對地址
chdir = /root/xiangmu
#根目錄下的wsgi
module = xiangmu.wsgi
http = :80

之後uwsgi --init xxx.ini就行了,結果成功~~

3.為nginx生成靜態文件
這裡需要你現在你項目的settings文件里,最下麵加一行數據
STATIC_ROOT=os.path.join(BASE_DIR,'你想取的文件夾名')
之後運行命令 python manage.py collectstatic會在你的項目根目錄生成一個你上面指定的文件夾
這個文件夾包含你會用到的所有靜態資源,用來調給nginx使用

4.修改nginx配置文件
在/etc/nginx/conf.d/文件夾下生成一個叫[你項目名].conf的項目配置文件
將中文修改成你所需要的

upstream 自定義1{
server 127.0.0.1:8001;
#上面的這個埠號需要記得,等會uwsgi要寫一樣的
}
server {
listen 80;
server_name [寫你自己要上線的網站ip或者功能變數名稱];
charset utf-8;
client_max_body_size 75M;

location /static/ {
alias /項目的絕對路徑/static_dist/;
}
location / {
uwsgi_pass 自定義1;
include uwsgi_params;
uwsgi_read_timeout 30;
}
}

這段話的意思我來概述一下,

第一個大代碼塊:配置一個等會和uwsgi響應的地址
第二個大代碼塊:監聽80號埠,設置訪問功能變數名稱和ip
第一個location:遇見網頁需要static的(我django靜態資源都在這個文件夾下麵),轉到咱們設置的新的static_dist裡面使用。(這樣是不是就不會請求uwsgi動態網頁了)。
第二個location:遇見網頁其他的,返回給uwsgi動態網頁解析去。(這樣動態靜態是不是就分開了)
在nginx配置文件寫完以後,就可以service nginx configtest測試一下正確不,如果顯示正常,那麼就沒問題。就可以重新啟動服務了service nginx restart
重啟服務完,你訪問網頁應該還是404,彆著急,因為我們還沒有配置uwsgi

5.修改前面項目路徑下的配置文件(前面的那個xxx.ini)
上面的http=:80這裡就不用了

[uwsgi]
#項目根目錄,要絕對地址
chdir = /root/xiangmu
#根目錄下的wsgi
module = xiangmu.wsgi
#下麵的這個,一定要和你剛纔nginx配置里的自定義1一樣
socket = 127.0.0.1:8001
chmod-socket = 666
#底下三個不加會運行預設值
master = true
processes = 4
vacuum = true 

之後就可以運行了,uwsgi --ini xxx.ini。
這裡你的網頁應該就能訪問了。如果不能訪問,請自己再捋一次邏輯關係,看看自己寫錯沒
如果發現css和js這些靜態文件沒載入,彆著急,看下麵

可能出現的錯誤

css、js、等靜態文件沒載入
這裡我們要弄清一個事情,網頁都是從nginx轉發出去的,如果沒有靜態文件,說明nginx出了問題。
打開你瀏覽器的f12的網路視窗,刷新一下,看看你的靜態文件是403錯誤還是404錯誤。

如果是404錯誤的話,沒找到,那問題就出現在配置路徑上,核對nginx里的location static和你生成的靜態文件路徑
如果是403錯誤,說明這會你的靜態文件禁止載入,nginx許可權不夠,所以我們修改兩個地方
打開/etc/nginx.conf,註意,這裡是/etc/nginx.conf!! /etc/nginx.conf!! /etc/nginx.conf!!不是你上面那個你項目的配置文件,是nginx的整體配置文件!!!!!!我一開始一直以為是上面的那個項目配置文件,在這裡走了很多彎路。。暈。
在打開的文件里,最上面的 user xxx;改成user root; (如果你沒有這個,說明你打開錯了!!)
找到原始的static和生成的static_dist這些靜態文件目錄,給目錄整體賦許可權
chmod -R 777 static chmod -R 777 static_dist
這樣403錯誤應該就搞定了~

將項目部署成https,也就是443埠
1.首先先從伺服器提供商處申請一下證書。這個可以百度一下,阿裡雲,騰訊雲都有免費的。
2.將從運營商拿到的兩個證書(pem和key),放在你/etc/nginx/cert/這個目錄下。
3.修改你項目的nginx配置文件

#後面的中文不用修改,其他中文修改成你自己的

upstream 自定義1{
server 127.0.0.1:8001;
}
server {
listen 443;
server_name 網站功能變數名稱或者ip;

ssl on;
ssl_certificate cert/尾綴為pem的那個文件.pem;
ssl_certificate_key cert/尾綴為可以的那個文件.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#密碼加密方式
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#依賴SSLv3和TLSv1協議的伺服器密碼將優先於客戶端密碼
ssl_prefer_server_ciphers on;

charset utf-8;
client_max_body_size 75M;
location /static/ {
alias /項目的絕對路徑/static_dist/;
}

location / {
uwsgi_pass 自定義1;
include uwsgi_params;
uwsgi_read_timeout 30;
}
}
#監控80埠,強制跳轉到443埠
server {
listen 80;
server_name 功能變數名稱或ip;
rewrite ^(.*)$ https://www.$server_name$1 permanent;
}

監聽443埠,然後將兩個證書加進來
監聽80埠,強制轉到443上面來


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近看一些國外程式員的文章,瞭解一下國外的程式員都在研究什麼、使用什麼工具、如何工作、如何掙錢……發現收穫頗豐,瞭解到了不少特有的思維方式及有創意的技術平臺。 本篇是關於如何通過編碼掙錢的文章,作者提供了十種通過編碼掙錢的途徑。在翻譯的同時,也會附帶一些個人的看法。下麵是正文: 知道如何編寫代碼是一 ...
  • 又看到一篇關於方法論的文章,觀點還是不錯的。翻譯出來,分享給大家。如果有一項啟發了你,那恭喜你。以下為正文內容: 就像沒有兩片相同的雪花一樣,程式員也各有不同。每一片雪花都是由不同原子以獨特的結構構成。同樣,對於程式員來說無論學習的途徑如何相似,在開發技能和能力上都會有所不同。 即使具有不同天資水平 ...
  • Session--驗證碼案例(Java) 博客說明 文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝! 案例 用戶輸入用戶名,密碼以及驗證碼。 如果用戶名和密碼輸入有誤,跳轉登錄頁面,提示:用戶名或密碼錯誤 如果驗證碼輸入有誤,跳轉登錄頁面, ...
  • 一、整體說明 tomcat需要完成兩件事情: 接受外部HTTP請求 載入servlet,並且把請求傳給Servlet進行處理。 整體可以抽象為如下: 二、整體代碼架構 在tomcat的代碼中抽象了以下三個類: Server類,代表tomcat實例 Connector類,代表HTTP監聽器(上圖中的H ...
  • 本篇文章分享看題目就知道是寫給初學者的,學的比較好的小伙伴也可以將自動演算法等一些知識給加進去,希望對大家有幫助! 好了,當我們所有的準備工作做好之後,我們就可以來編寫我們的C語言連連看游戲了! 其實這個游戲設計起來真的是很簡單的一種,本例用到的知識點主要有:數組,結構體,分支結構,圖形庫函數。 游戲 ...
  • a=['序號',1,2,3,4,5] b=['成本',20,45,12,34,67] import pandas c=pandas.Series(a) d=pandas.Series(b) e=pandas.DataFrame(list(zip(c,d))) print(e) 0 1 0 序號 成本 ...
  • HTTP 非同步風格伺服器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 設置伺服器運行參數 $serv->set(array( 'daemonize' => 1, // 作為守護進程運行,需同時設置log_ ...
  • 【一、項目目標】 通過Python爬取QQ音樂數據(一)我們實現了獲取 QQ 音樂指定歌手單曲排行指定頁數的歌曲的歌名、專輯名、播放鏈接。 此次我們在之前的基礎上獲取QQ音樂指定歌曲的歌詞及前15個精彩評論。 【二、需要的庫】 主要涉及的庫有:requests、json、html 【三、項目實現】 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...