整合營銷服務商

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

          免費咨詢熱線:

          nginx搭建基于python的web環境的實現步驟

          nginx搭建基于python的web環境的實現步驟

          搭建開始前,我們先來梳理下web服務工作流程,先看下圖:

          1、用戶(PC)向web服務器發起http請求

          2、web服務器判斷用戶請求文件是否為靜態文件,是則直接讀取靜態文件并返回給用戶,不是則通過WSGI協議將請求丟給web框架(django)代碼處理

          3、看web框架是否啟動django中間件,如果啟用,則依據中間件對請求進行修改,如果不啟用,則進入下一步

          4、web框架中的路由程序將根據請求中的url文件名將請求路由至相應py文件

          5、相應py文件收到請求后根據用戶提交的參數進行計算(期間可能會調用數據庫),然后返回計算后的結果和自定義頭部信息以及狀態碼返回

          6、web框架將返回的數據打上通用標識符(頭部信息)后返回給web服務器

          7、web服務器打上web服務器的通用標識符(頭部信息)后返回給用戶

          8、用戶收到返回的數據

          通過上面可以看到django框架基于WSGI協議和web服務器進行交互,那么WSGI協議又是什么呢? 咱們用代碼來說明(偽代碼。

          寫一個簡易的遵循WSGI協議的web服務器軟件和django程序):


          WSGI服務器的程序:

          class WSGI_WEB(object):
          def __init__(self):
          # 1. 創建套接字
          self.tcp_server_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
          # 2. 綁定
          self.tcp_server_socket.bind(("", 7890))
          # 3. 變為監聽套接字
          self.tcp_server_socket.listen(128)
           
          def set_response_header(self, status, headers):
          self.status=status
          self.headers=[("server", "WSGI_simple_web v1.0")]
          self.headers +=headers
           
          def run(self):
          new_socket, client_addr=self.tcp_server_socket.accept()
          env=new_socket.recv(1024)
          body=application(env, set_response_header) # env是web服務器接收到瀏覽器發送來的數據包;set_response_header為web服務器的一個方法地址,目的是讓django幫web服務器生成http頭部(不是以return的形式給web服務器);此外還有這里調用django里的應用還有一個最核心的任務,就是獲取返回數據的body!
          header=self.status + self.headers
          response=header + body
          new_socket.send(response.encode("utf-8"))


          django的app程序:

          def application(env, start_response):
          start_response('200 OK', [('Content-Type','text/html')])
          return [b"Hello World"]


          問題:

          在生產環境中使用django提供的簡易web服務器性能太差,一般只用于調試。強大的nginx又不支持WSGI,那么怎么辦呢?


          方案:

          在nginx和python應用之間加一層支持WSGI協議的web服務器。以后靜態文件由nginx進行處理,動態文件丟給WSGI服務器,然后WSGI服務器再丟給web框架處理。最理想的支持WSGI協議的web服務器就是uWSGI。


          下面來詳細介紹下搭建uWSGI服務器以及與nginx聯動的方法:

          1、安裝uWSGI(支持WSGI的WEB服務器):

          centos下python3.6安裝uWSGI方法:

          yum install -y gcc* pcre-devel openssl-devel python36-devel.x86_64
           
          pip3.6 install uwsgi


          2、開啟uWSGI服務

          方式一:

          uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static
           
          --http 監聽IP端口
           
          --file 項目wsgi.py文件路徑
           
          --static-map 靜態文件路徑


          注意: 執行這條命令的時候:一定要在這個項目目錄中~

          方式二(使用配置文件):

          vi uwsgi.ini:
           
          [uwsgi]
           
          # 監聽端口(nginx采用反向代理模式時必填)
           
          http=0.0.0.0:8888
           
           
          # 項目目錄
           
          chdir=/opt/test/test1/
           
           
          # 啟動uwsgi的用戶名和用戶組
           
          uid=root
           
          gid=root
           
           
          # 指定項目的application(我猜是這里的“test1.wsgi”拼接上面的項目目錄后,就將項目中的wsgi.py文件和uWSGI服務器關聯起來了)
           
          module=test1.wsgi:application
           
          
          # 指定sock的文件路徑(nginx采用本地模式時必填)
           
          socket=/opt/test/script/uwsgi.sock
           
          
          # 啟用主進程
           
          master=true
           
           
          # 進程個數
           
          workers=5
           
          pidfile=/opt/test/script/uwsgi.pid
           
           
          # 自動移除unix Socket和pid文件當服務停止的時候
           
          vacuum=true
           
           
          # 序列化接受的內容,如果可能的話
           
          thunder-lock=true
           
           
          # 啟用線程
           
          enable-threads=true
           
          
          # 設置自中斷時間
           
          harakiri=30
           
          
          # 設置緩沖
           
          post-buffering=4096
           
          
          # 設置日志目錄
           
          daemonize=/opt/test/script/uwsgi.log
           
          
          # 設置隔多久加載一次項目代碼
           
          py-autoreload=1
           
           
          執行配置文件(注意:這里用什么賬戶執行的,以后滲透進來獲取到的就是什么賬戶。所以這一步切忌不要用root執行。):
           
            uwsgi --ini uwsgi.ini


          彩蛋:


          重啟uWSGI進程: uwsgi --reload uwsgi.pid # 代碼做變更后uWSGI進程不會立即加載,此時可以重啟一下uWSGI進程讓它生效。。。是不是感覺有點坑,沒事,可以在配置文件中設置py-autoreload
           
          關閉uWSGI進程: uwsgi --stop uwsgi.pid


          3、配置nginx

          方式一(反向代理模式):

          upstream uwsgi{
           
          server 10.10.10.29:8888;
           
          }
           
          
           
          server {
           
          listen 80;
           
          server_name localhost;
           
          
           
          #charset koi8-r;
           
          #access_log /var/log/nginx/host.access.log main;
           
          
           
          location / {
           
          proxy_pass http://uwsgi; # 通過反向代理和uWSGI服務器關聯
           
          }
           
          }


          方式二(本地模式):

          server {
           
          listen 8080;
           
          server_name localhost;
           
          
           
          #charset koi8-r;
           
          #access_log /var/log/nginx/host.access.log main;
           
          
           
          location / {
           
          include uwsgi_params; # 指定nginx和uWSGI服務器的通信方式
           
          uwsgi_connect_timeout 30;
           
          uwsgi_pass unix:/opt/test/script/uwsgi.sock; # 通過sock文件和uWSGI服務器關聯! 因為nginx會去讀取.sock文件,所以需要關閉selinux才行!!!
           
          }
           
          }


          4、此時訪問django的admin管理后臺時,靜態資源會調取失敗。這時可以將該項目所有靜態資源統一收集到一個文件夾下,然后由nginx統一去調取,真正做到動靜分離(動的給uWSGI,靜的由nginx直接調取):

          在settings.py中加入:

          TATIC_ROOT=os.path.join(BASE_DIR, 'static_file')


          執行如下命令(搜集項目中所有靜態文件至'static_file'目錄):

          python3.6 manage.py collectstatic --noinput


          此時會在項目目錄下生成一個'static_file'文件夾,內含admin和所有app涉及的靜態文件 。

          在nginx中配置靜態文件路徑(如果nginx和uWSGI不屬同一臺服務器可以使用反向代理的方式來調取靜態文件):

          location /static/ {
           
          alias /opt/test/test1/static_file/;
           
          }

          此時就可以訪問基于python后臺的web網站了。

          小編寄語

          當然不能只為游戲外掛去學習,學習多個技術,提升自己,你會發現其中很多小秘密都是貫通的,在此小編幫助大家整理了一套python教程,如果自己零基礎或者進階的基本都有合適的,下面展示了部分,希望也能幫助對編程感興趣,如果能幫到你請點贊、點贊、點贊:

          電子書系列:


          點贊,收藏并轉發文章后,進入小編主頁,看以下圖片操作:

          一、前言】

          本文章主要講解Nginx的基礎搭建(如果有不知道web服務器的可以百度,或者我再做一篇圖解web)。

          Nginx在互聯網中作為一個不可或缺的組件,我們看到LNMP集成環境。LNMP(Linux+Nginx+Mysql+Php);如果只知道這個不知道Nginx的搭建過程的話我們有Nginx的主要特性會錯過。比如Nginx的優點:

          高可用(一個組件可以服務上千人)

          熱部署(可以做到不停機就能升級基礎設施服務)

          反向代理(通常可以,上游反向代理,下游負載均衡處理外部請求)


          【二、Nginx搭建】

          1、首先先下載一個版本。

          1. 1)Nginx社區版2)Nginx企業版 兩者沒有太大區別,都支持主要幾大功能。3)淘寶版本的Nginx對IO進行了優化,至今淘寶在使用的Tengine。

          2、Nginx版本分支

          3、版本如下:

          1)MainLine Version(主線版本開發)

          2)Stable(穩定版本)

          3)Legacy Version(歷史版本)-- 如果項目需要上到選定版本可以選這個

          4、下載(我們以Nginx Stable Version為例子)。我們能看到Stable Version底下有三個欄目:

          1)CHANGE-1.16 是介紹這個版本和上個版本的區別

          2)Nginx-1.16 pgp 這個是Linux版本下載選項,將會下載倒tar.gzNginx/Windows

          3)1.16.1 這個是Windows系統下載的,將會下載window包


          【三、Nginx文件目錄(如下)】

          1、文件目錄如下所示:

          2、文件內容解析如下:

          1)conf(存放配置文件):Nginx.conf(主要的建站配置文件夾)

          2)contrib(是一些Linux的Vim配置文件):作用是將整個vim文件移動到~/.vim/profile目錄底下,就會在vim下有高亮表現

          3)doc (documentation 文檔目錄):一些日志改變以及readme文檔還有License授權

          4)html(默認的html,網站的入口):

          • index.html 默認網頁
          • 50x.html 常見的錯誤頁面

          5)logs(默認的日志文件夾)

          6)temp(臨時文件目錄)


          【四、Windows下搭建】

          首先需要解決如何對下一頁的網址進行請求的問題。可以點擊下一頁的按鈕,觀察到網站的變化分別如下所示:

          1、Windows下我們直接點擊Nginx根目錄下的Nginx.exe即可立即使用了。閃退是正常現象,之后檢查端口查看是否被占用,第一次啟動推薦使用命令行啟用 :

          .\nginxpath\nginx.exe(一直停留不變則說明開啟成功)  

          2、 然后我們打開網址:

          http://localhost:80

          3、這樣就是成功 如果失敗了看下面。使用Windows + R啟動命令行,擁有最高權限,輸入命令:

          netstart -ano | findstr 80 #找到占用的pid號。


          4、然后將其kill掉,命令如下:

          taskkill /F /pid


          5、之后在使用最開始的方法啟動即可。


          【五、Linux環境下(Centos下)搭建】

          1、Linux環境下使用最高權限執行(不考慮用戶權限)。

          2、首先先安裝被依賴的插件,命令如下:

          yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

          3、之后依次如此下列的命令,記得看注釋噢~

          tar -zxvf Nginx-1.16.1.tar.gz
          cd Nginx-1.16.1
          # 這下面幾步驟是進行加載vim插件的,使其在修改conf的時候可以進行常亮
          cd contrib
          mv contrib ~/.vim
          cd ..
          # path自己需要安裝的地方
          ./configure -prefix=/path/Nginx
          # configure完成后即可,make && make install去
          # configure 是進行配置化操作
          # make 是進行編譯操作
          # make install 是進行編譯后文件的部署行為
          # 為了方便就將make && make install 一起進行

          4、之后運行Nginx,命令如下:

          cd /nginxInStallPath
          ./Nginx
          #沒有任何信息則是運行成功了。Linux的沒有任何消息就是最好的消息
          curl http://localhost

          5、至此Nginx搭建完成。下列命令是一些常規的操作命令:

          ./Nginx -s reload #重新加載(Nginx能做到熱部署的一個原因)
          ./Nginx -s stop #關閉服務器
          ./Nginx -t # 可以測試剛修改的Nginx.conf能否生效


          【六、Nginx.conf配置】

          1、下面是進行Nginx.conf配置,命令如下:

          # 下面是進行Nginx.conf配置
          cd conf
          vim Nginx.conf

          2、修改文件中的內容如下所示:

          worker_processes number;
          # error_log path #錯誤日志文件位置
          # error_log path notice 提醒錯誤文件位置
          # error_log path info 一些Logger::info的輸出位置
          events {
              work_connections 1024; #定義最大連接數量
          }
          
          
          # http 定義http的位置(高難度配置下章在講解)
          http {
              include mine.types; #定義包含類型,網頁請求request_type的地方屬性值設置地方在mine.types文件里賣你
              default_type:application/ocet-stream #設置屬性流
              sendfile    on; #從一個 buffer到另一個 buffer的拷貝用于優化速度
              #tcp_nopush on;
              keepalive_timeout 60; #設置請求超時時間
          
          
              server {
                  listen 80 # 設置監聽的端口
                  server_name localhost # 設置監聽的域名
                  charset koi8-r #設置字符集
          
          
                  #access_log logs/host.access.log main #設置主訪問日志存儲
          
          
                  location / { #設置正則表達式匹配localhost/底下的目錄按照此位置進行處理,
                               #下篇文章配置php會用到
                      root html; #設置網站根目錄為html路徑
                      index index.html index.htm; #設置沒有確定的資源文件下,會自動訪問index.hmtl例如
                                                  # 例如訪問http://localhost會實際訪問http://localhost/index.html
                                                  # 或者 http://localhost/index.htm
                     }
                 error_page 404       /404.html #自定義錯誤頁面代碼下訪問的頁面
          
          
                 error_page 500 502 503 504 /50x.html
                 location=/50.html { #訪問路徑為50x.html 無論是500, 502, 503, 504, 505這些頁面
                      root html;
                   }
                  # location ~\.php$ {
                  #   proxy_pass http://127.0.0.1;
                  # }
                  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
                  #
                  #location ~ \.php$ {
                  #    root           html;
                  #    fastcgi_pass   127.0.0.1:9000;
                  #    fastcgi_index  index.php;
                  #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                  #    include        fastcgi_params;
                  #}
          
          
                 #location ~/\.ht {
                 #    deny all;拒絕所有用戶訪問
                # }
              }
          # 底下是配置https,https是現在還在比較流行的一種安全web服務器的基本要求
              https {
              }
          }


          【七、總結】

          1、Nginx是現代互聯網企業中不可缺少的一門技術,在微服務中也極為重要,尤其反向代理所帶來的抗風險能力極為重要,熱部署能力。

          2、本文主要講述了Nginx在windows和Linux系統下的搭建過程,希望對搭建的學習有幫助。

          想學習更多Python網絡爬蟲與數據挖掘知識,可前往專業網站:http://pdcfighting.com/

          載包

          批量導出當前開發環境的包信息

          pip freeze > requirements.txt
          

          下載requirements內的包及其依賴到【某文件夾】

          pip download -r requirements.txt
          

          .whl文件

          只有本地對應版本的Python才能安裝這些包,如果想要要搭建pip鏡像站并兼容更多版本的Python怎么辦呢?

          這里有一個網站
          https://www.lfd.uci.edu/~gohlke/pythonlibs/
          里面有常用的532個包,每一個對應的有各種版本的whl文件,一共6000+

          這就要爬蟲了,我寫了一個,代碼就不貼了,已上傳github

          https://github.com/tjxj/whlFilesCrawler

          建立索引

          本地安裝pip2pi

          pip install pip2pi
          

          命令行切換到下載的 .whl文件夾,建立索引(自動生成了index.html)

          dir2pi -S 【某文件夾】
          

          然后文件夾內就出現了一個simple文件夾,這里的內容就和阿里、清華、豆瓣的源差別沒那么大了。

          nginx發布鏡像源

          準備好Linux or Windows 的 Nginx 安裝程序

          http://nginx.org/en/download.html

          將【某文件夾】和Nginx 安裝包一起copy到內網的服務器

          Nginx 安裝很簡單,Terminal里執行nginx不報錯就算大功告成。

          找到nginx.conf文件,僅需修改如下幾個內容,其他的都不需要動:

          server{
          listen 80;
          server_name 你的IP地址
          root 【某文件夾】的路徑
          }
          

          重啟nginx服務器

          # Linux
          sudo systemctl restart nginx
          # Windows
          nginx -s reload
          

          瀏覽器打開 http://你的IP/simple

          現在如果內網的服務器墻是通的,其他機器應該也能訪問這個網址,pip 鏡像站就搭建好了,so easy。

          如果內網內的主機想要pip安裝所需的包,還需要配置一下pip

          在 Linux & macOS 中,配置需要寫到 ~/.pip/pip.conf 文件中;Windows 中,配置文件位置為 %HOMEPATH%\pip\pip.ini,%HOMEPATH% 即你的用戶文件夾,一般為“\Users<你的用戶名>”,具體值可以使用 echo %HOMEPATH% 命令查看。

          通常你需要手動創建對應的目錄和文件,然后寫入下面的內容:

          [global]
          index-url=http://你的IP/simple
          [install]
          trusted-host=你的IP
          

          內網的主機安裝Python的包及其依賴

          pip install [所需的包名]

          主站蜘蛛池模板: 无码人妻一区二区三区在线 | 91在线一区二区| 精品国产精品久久一区免费式| 亚洲一区免费在线观看| 农村人乱弄一区二区| 色老板在线视频一区二区| 综合无码一区二区三区| 国产精品久久久久一区二区三区 | 精品无人乱码一区二区三区| 男人免费视频一区二区在线观看| 久久久不卡国产精品一区二区 | 中文字幕一区在线播放| 亚洲视频免费一区| 另类一区二区三区| 亚洲人AV永久一区二区三区久久| 日韩精品一区二区亚洲AV观看| 一区二区三区AV高清免费波多| 亚洲福利一区二区精品秒拍| 精品亚洲一区二区三区在线观看 | 精品在线视频一区| 无码国产精品一区二区免费式影视 | 成人精品一区久久久久| 久久青青草原一区二区| 中文字幕一区视频| 亚洲一区二区三区在线网站| 国产一区二区三区不卡观| 一区二区免费在线观看| 一区二区三区免费在线观看| 色综合视频一区二区三区44| 精品欧洲av无码一区二区| 亚洲av色香蕉一区二区三区蜜桃| 国产高清在线精品一区| 欧美激情国产精品视频一区二区 | 国产无人区一区二区三区| 日韩一区二区在线观看| 中文字幕精品一区| 一区二区中文字幕| 国产精品一区二区综合| 国产成人精品一区二三区 | 伊人色综合一区二区三区影院视频 | 3d动漫精品成人一区二区三|