摘要:目前在和平臺下使用最廣泛的免費服務器有和。涉及到普通用戶執行命令時權限不足的問題,可在命令前增加指令解決。是基于二進制的線路協議,與協議作用相同,但屬于服務器自有協議是服務器,它實現了協議等協議安裝。
前言
瀏覽器上網的過程簡單來說即是瀏覽器從服務器中獲取網站信息,經過渲染后將效果呈現給用戶。這里側重介紹下在幕后默默工作著的服務器。
Web服務器是運行在物理服務器上的一個程序,永久地等待客戶端(主要是瀏覽器,比如Chrome,Firefox等)發送請求。Web服務器通過HTTP協議與客戶端通信,當收到請求之后,如果是靜態文件的話Web服務器可直接返回,如果不是靜態文件的話需要有一個Web應用服務器根據不同的請求處理對應的業務邏輯生成相應的響應,如下圖所示。
目前在UNIX和LINUX平臺下使用最廣泛的免費Web服務器有Apache和Nginx。Nginx是高效的Web服務器和反向代理服務器,可以用作負載均衡,與Apache相比,Nginx支持高并發,可以支持百萬級的TCP連接,十萬級別的并發連接,部署簡單,內存消耗少,成本低,雖然動態請求處理沒有Apache豐富,但Nginx支持uWSGI的uwsgi協議,可將動態請求傳遞至uWSGI處理。
這里選擇使用Nginx和uWSGI相結合的應用,由于Nginx是反向代理服務器,因此需要網絡上的Web應用服務器uWSGI負責具體的應用邏輯處理,雖然uWSGI也可以作為Web服務器應用在小規模網站,但配合Nginx使用可以更好的利用Nginx在緩存、并發處理,安全防護,日志等方面的強大功能。
下面就來介紹下如何搭建Nginx+uWSGI環境來運行Python應用。
下載源碼庫。Nginx服務器的安裝依托于openssl、zlib、pcre庫的支持,在安裝Nginx之前需要對這三個庫進行安裝,以下提供各個源碼庫的下載地址:
(1)openssl-fips-2.0.2.tar.gz(安全通訊庫)https://www.openssl.org/source/
(2)zlib-1.2.7.tar.gz(數據壓縮庫)http://www.zlib.net/
(3)pcre-8.21.tar.gz(正則表達式庫)http://www.pcre.org
(4)nginx-1.2.6.tar.gz http://nginx.org/en/download....
安裝源碼庫。在Shell終端界面中輸入Linux命令執行安裝。涉及到普通用戶執行root命令時權限不足的問題,可在命令前增加sudo指令解決。執行安裝分為以下幾步:
(1)解壓文件。tar zxvf openssl-fips-2.0.2.tar.gz
(2)進入至存儲的文件夾路徑。cd openssl-fips-2.0.2
(3)運行shell配置腳本檢測運行環境,生成makefile文件。./configure(Nginx的配置腳本需要結合依托庫運行:./configure --with-pcre=../pcre-8.21 --with-zlib=../zlib-1.2.7 --with-openssl=../openssl-fips-2.0.2)
若運行環境不滿足,如運行pcre配置文件時提示“configure: error: You need a C++ compiler for C++ support”,即缺少C++編譯器,那么需要安裝C++編譯器“sudo apt-get install g++”
(4)編譯源碼庫:make
(5)安裝源碼庫:make instal
執行測試命令:./nginx -t(在/usr/local/nginx/sbin路徑下執行),出現如下提示表示已經安裝成功
啟動/停止服務器
(1)執行啟動命令:./nginx。啟動后在瀏覽器輸入http://localhost:80監聽本機80端口,出現如下圖所示內容,表示已經成功啟動nginx服務器
(2)執行查看端口命令:netstat -ntlp
(3)篩選出nginx進程并打印:ps -ef|grep nginx
(4)Kill進程ID方式退出nginx進程:kill -QUIT
在介紹uWSGI服務器部署前,先梳理uwsgi、uWSGI、WSGI的區別:
WSGI(Web Server Gateway Interface)是為Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口協議,只要web服務器和 web應用都遵守WSGI協議,那么兩者之間就可以任意組合。
uwsgi是基于二進制的線路協議,與WSGI協議作用相同,但屬于uWSGI服務器自有協議
uWSGI是Web服務器,它實現了WSGI協議、uwsgi、http等協議
安裝uWSGI。此處通過pip安裝,也可以下載源碼進行安裝。
pip install uwsgi
Python編寫應用程序server.py,在網頁上顯示“Hello World”,代碼如下:
def application(environ, start_response): ??? status = "200 OK" ??? output = "Hello World!" ??? response_headers = [("Content-type", "text/plain"), ??????????????????????? ("Content-Length", str(len(output)))] ??? start_response(status, response_headers) ??? return [output]
啟動uWSGI服務器。可通過命令方式啟動uWSGI,也可以將參數寫在配置文件中(inixmljsonyaml),指定配置文件來啟動uWSGI(命令“uwsgi myapp.ini”)。
sudo uwsgi --http-socket :8001 --plugin python --wsgi-file server.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
--http-socket參數指定了HTTP監聽地址和端口,
--wsgi-file參數指定了WSGI應用程序入口,uWSGI會自動搜尋名為”application”的應用對象并調用它。
--plugin python參數指定uWSGI?使用 python 插件去解析文件
--master 參數配置主進程
--processes 參數配置多進程
--threads參數配置多線程
--stats 參數配置在指定地址訪問狀態信息,如下圖在”127.0.0.1:9191″獲取JSON格式的運行信息
配置文件內容如下: [uwsgi] http-socket=:8001 plugins = python wsgi-file=server.py master=true processes=4 threads=2 stats=127.0.0.1:9191
瀏覽器URL輸入”http://localhost:8001″,可以訪問到server.py執行的結果”Hello World!”
更多關于uWSGI的介紹可參考官網文檔:http://uwsgi-docs.readthedocs...
Ngx_http_uwsgi_module模塊起到Nginx服務器與uWSGI服務器交互作用,通過對uwsgi_pass設置服務器地址和協議,可將動態內容傳遞至uWSGI處理。
配置uWSGI。將uWSGI的HTTP端口監聽改為socket端口監聽,即配置文件中的“http-socket”項改為“socket”項。
[uwsgi] socket=127.0.0.1:3031 plugins = python wsgi-file=server.py master=true processes=4 threads=2 stats=127.0.0.1:9191
配置Nginx。打開Nginx的配置文件nginx.conf(Ubuntu上路徑“/usr/local/nginx/conf”),需要執行“sudo chmod -R 777 nginx.conf”降低配置文件權限才可對服務器相關屬性進行配置
配置代碼如下: server {? ???listen?????? 80;? ???server_name? localhost;? ???location / {? #root?? html; #index? index.html index.htm; include uwsgi_params;#加載uWSGI配置參數 uwsgi_pass 127.0.0.1:3031;#請求轉發至”127.0.0.1:3031″端口上,即uWSGI服務器 ????????? }? ?? }?
啟動uWSGI服務器和nginx服務器,再次訪問”http://localhost:80”時會看到python應用程序返回“Hello World!”,表示已經完成nginx服務器對uWSGI服務器的反向代理功能。
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf sudo service nginx restart$ uwsgi myapp.ini
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39760.html
摘要:目前在和平臺下使用最廣泛的免費服務器有和。涉及到普通用戶執行命令時權限不足的問題,可在命令前增加指令解決。是基于二進制的線路協議,與協議作用相同,但屬于服務器自有協議是服務器,它實現了協議等協議安裝。 前言 瀏覽器上網的過程簡單來說即是瀏覽器從服務器中獲取網站信息,經過渲染后將效果呈現給用戶。這里側重介紹下在幕后默默工作著的服務器。Web服務器是運行在物理服務器上的一個程序,永久地等待...
摘要:服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。可以解決項目與項目之間對同一個包的不同版本的依賴問題。有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。 前一陣自己用flask框架寫了一個博客程序,寫完之后想部署到服務器上,因為是小白,所以自己google了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...
摘要:服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。可以解決項目與項目之間對同一個包的不同版本的依賴問題。有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。 前一陣自己用flask框架寫了一個博客程序,寫完之后想部署到服務器上,因為是小白,所以自己google了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...
閱讀 2899·2021-10-27 14:19
閱讀 537·2021-10-18 13:29
閱讀 1128·2021-07-29 13:56
閱讀 3547·2019-08-30 13:19
閱讀 1926·2019-08-29 12:50
閱讀 1035·2019-08-23 18:16
閱讀 3521·2019-08-22 15:37
閱讀 1897·2019-08-22 15:37