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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...