Nginx部署

前言:
項目各種測試和bug調(diào)試完畢主巍,就需要部署上線,宣傳造勢,讓更多人知道你完成的心血。今天就對Nginx部署做一下自己的淺談:

官網(wǎng)
http://nginx.org/

中文資料
http://www.nginx.cn/doc/index.html
http://tengine.taobao.org/book/

為什么選擇Nginx

作為We服務(wù)器:相比Apache夹界,Nginx使用資源更少,支持更多的并發(fā)連接隘世,體現(xiàn)更高的效率可柿,使Nginx倍受歡迎,能夠支持高達50000個并發(fā)連接數(shù)的響應(yīng)
作為負載均衡服務(wù)器:Nginx既可以在內(nèi)部直接支持Redis和PHP丙者,也可以支持作為HTTP代理服務(wù)器對外進行服務(wù)复斥,Nginx使用C編寫,不論是系統(tǒng)資源開銷還是CPU使用效率都處理的非常優(yōu)秀
Nginx安裝非常簡單械媒,配置文件非常簡潔目锭,Bug非常少:Nginx啟動非常容易,并且?guī)缀蹩梢宰龅? * 24小時不間斷運行滥沫,即使運行數(shù)個月也不需要重新啟動

安裝:
sudo apt install nginx

Nginx安裝主要有兩種方式
    源碼安裝
        1. 下載源碼壓縮包
        2. 安裝源碼編譯依賴包 gcc,zlib,make...
        3. 配置編譯模塊
        4. make && make test 
        5. make install

    包管理工具安裝
        1. 去官網(wǎng)將所使用依賴添加到包管理工具中
        2. 更新包管理工具資源
        3. 使用包管理工具安裝

啟動Nginx

    nginx   [ -c  configpath]

信息查看

    nginx   -v
    nginx   -V

控制Nginx

    nginx -s signal
        stop        快速關(guān)閉
        quit        優(yōu)雅的關(guān)閉
        reload      重新加載配置

通過系統(tǒng)管理

    systemctl  status  nginx    查看nginx狀態(tài)
    systemctl  start    nginx   啟動nginx服務(wù)
    systemctl  stop     nginx            關(guān)閉nginx服務(wù)
    systemctl  enable nginx 設(shè)置開機自啟
    systemctl  disable nginx    禁止開機自啟

配置文件

Nginx配置文件包含指定指令控制的模塊岖常。
    指令分為簡單指令和塊指令
        一個簡單指令由名稱和參數(shù)組成暂筝,以空格分隔获雕,并以分號結(jié)尾
        一個塊指令和簡單指令具有相同的結(jié)構(gòu)聋丝,但不是以分號結(jié)束,而是以一個大括號包圍的一堆附           加指令結(jié)束
    如果一個大括號內(nèi)可以有其他的指令缀辩,它就被稱為一個上下文臭埋,比如(events踪央,http,server瓢阴,location)
    

指令
    nginx   -t      不運行畅蹂,僅測試配置文件
    nginx        -c     configpath  從指定路徑加載配置文件
    nginx     -t    -c    configpath      測試指定配置文件


配置文件結(jié)構(gòu)

main        全局設(shè)置

events{     工作模式,連接配置
    ...
}
http{       http的配置
    ...
    upstream xxx{   負載均衡配置
        ...
    }
    server{     主機設(shè)置
        ...
        location xxx{   URL匹配
            ...
        }
    }
}

main

user    nginx;  worker進程運行的用戶和組

worker_processes    1;  指定Nginx開啟的子進程數(shù)荣恐,多核CPU建議設(shè)置和CPU數(shù)量一樣的進程數(shù)

error_log     xxx  level;       用來定義全局錯誤日志文件液斜,通常放在var中,level有 debug叠穆,info少漆,notice,                                     warn硼被,error示损,crit

pid          xxx;       指定進程id的存儲文件位置


events

指定工作模式和以及連接上限

events{
    use epoll;
    worker_connections 1024;
}

use 指定nginx工作模式
    epoll   高效工作模式,linux
    kqueue  高效工作模式嚷硫, bsd
    poll    標準模式
    select  標準模式

worker_connections 定義nginx每個進程的最大連接數(shù)
    正向代理    連接數(shù) * 進程數(shù)
    反向代理    連接數(shù) * 進程數(shù) / 4
    linux系統(tǒng)限制最多能同時打開65535個文件检访,默認上限就是65535,可解除 ulimit -n 65535


http

最核心的模塊仔掸,主要負責(zé)http服務(wù)器相關(guān)配置脆贵,包含server,upstream子模塊

include mime.types;設(shè)置文件的mime類型

include xxxconfig;  包含其它配置文件起暮,分開規(guī)劃解耦

default_type  xxx;  設(shè)置默認類型為二進制流丹禀,文件類型未知時就會使用默認

log_format  設(shè)置日志格式

sendfile        設(shè)置高效文件傳輸模式

keepalive_timeout   設(shè)置客戶端連接活躍超時

gzip        gzip壓縮


server

用來指定虛擬主機

listen  80;     指定虛擬主機監(jiān)聽的端口

server_name localhost;  指定ip地址或域名,多個域名使用空格隔開

charset     utf-8;      指定網(wǎng)頁的默認編碼格式

error_page 500 502 /50x.html 指定錯誤頁面

access_log   xxx main;  指定虛擬主機的訪問日志存放路徑

error_log   xxx main;   指定虛擬主機的錯誤日志存放路徑

root    xxx;        指定這個虛擬主機的根目錄

index   xxx;        指定默認首頁


location

核心中的核心鞋怀,以后的主要配置都在這

主要功能:定位url,解析url持搜,支持正則匹配密似,還能支持條件,實現(xiàn)動靜分離

語法
    location [modifier]  uri{
        ...
    }

modifier 修飾符
    =   使用精確匹配并且終止搜索
    ~   區(qū)分大小寫的正則表達式
    ~*  不區(qū)分大小寫的正則表達式
    ^~  最佳匹配葫盼,不是正則匹配残腌,通常用來匹配目錄
    
常用指令
    alias   別名,定義location的其他名字贫导,在文件系統(tǒng)中能夠找到抛猫,如果location指定了正則表達式,alias將會引用正則表達式中的捕獲孩灯,alias替代lication中匹配的部分闺金,沒有匹配的部分將會在文件系統(tǒng)中搜索


Django部署

django 服務(wù)器 
    runserver
    wsgi
uwsgi : web服務(wù)器,多線程處理的不錯
    1. pip install uwsgi
    2. 工程目錄下創(chuàng)建uwsgi.ini 配置文件
    3. 書寫配置信息
    4. 使用uwsgi服務(wù)器
        - 啟動        uwsgi    --ini    uwsgi.ini
        - 停止        uwsgi    --stop    uwsgi.ini

nginx配置
    location /static{
        alias  xxx/static/;
    }
    location / {
        include uwsgi_params;
        uwsgi_pass localhost:8000;
    }



反向代理

proxy_pass  URL;            反向代理轉(zhuǎn)發(fā)地址,默認不轉(zhuǎn)發(fā)header峰档,需要轉(zhuǎn)發(fā)header則設(shè)置
                    proxy_set_header HOST $host;
proxy_method  POST;     轉(zhuǎn)發(fā)的方法名

proxy_hide_header Cache-Control;    指定頭部不被轉(zhuǎn)發(fā)        

proxy_pass_header Cache-Control;    設(shè)置哪些頭部轉(zhuǎn)發(fā)

proxy_pass_request_header on;   設(shè)置轉(zhuǎn)發(fā)http請求頭

proxy_pass_request_body on; 設(shè)置轉(zhuǎn)發(fā)請求體


upstream

負載均衡模塊败匹,通過一個簡單的調(diào)度算法來實現(xiàn)客戶ip到后端服務(wù)器的負載平衡

寫法 upstream  myproject{
    ip_hash;
            server 127.0.0.1:8000;
    server 127.0.0.1:8001 down;
    server 127.0.0.1:8002 weight=3;
    server 127.0.0.1:8003 backup寨昙;
    fair;
          }
負載均衡算法
    weight  負載權(quán)重
    down    當前server不參與負載均衡
    backup  其它機器全down掉或滿載使用此服務(wù)
    ip_hash 按每個請求的hash結(jié)果分配
    fair    按后端響應(yīng)時間來分(第三方的)


服務(wù)器上線一般有兩個:
? ? ? ?一個是apache
? ? ? ?一個是Nginx
Nginx與apache優(yōu)缺點
Nginx相對于apache的優(yōu)點:
? ? ? ?1.并發(fā)率高于apache
? ? ? ?2.對靜態(tài)資源的處理要好
? ? ? ?3.可以做負載均衡和反向代理
? ? ? ?4.占用更少的內(nèi)存及資源
? ? ? ?5.Nginx處理請求是異步非阻塞的掀亩,而apache則是阻塞型的舔哪,在高并發(fā)下Nginx能保持底資源低消耗高性能

apache相對于Nginx的優(yōu)點:
? ? ? ?1.rewrite,相對于Nginx的rewrite要強大
? ? ? ?2.模塊超多,基本能想到的都可以找到
? ? ? ?3.少bug槽棍,Nginx的bug相對較多
4.超級穩(wěn)定

相同點:
? ? ? ?1捉蚤、都是HTTP服務(wù)器軟件
? ? ? ?2、功能上都采用模塊化結(jié)構(gòu)設(shè)計
? ? ? ?3炼七、都支持通用的語言接口缆巧,如PHP、Perl特石、Python等
? ? ? ?4盅蝗、支持正向、反向代理姆蘸、虛擬主機墩莫、URL重寫、壓縮傳輸逞敷、SSL加密傳輸

一般來說狂秦,需要性能web服務(wù),使用Nginx推捐,如果不需要性能只求穩(wěn)定裂问,那就是apache。
Nginx只適合靜態(tài)和反向牛柒,動態(tài)處理請求是雞肋堪簿,一般動態(tài)請求要apache去做
Nginx是很不錯的前段服務(wù)器,負載性能很好皮壁,用webbench模擬10000個靜態(tài)文件請求號不吃力椭更。apache有先天不支持多核心處理負載的缺點,建議使用Nginx做前段蛾魄,后端用apache虑瀑。大型網(wǎng)站建議用Nginx自帶的集群功能
Apache在處理動態(tài)有優(yōu)勢,Nginx并發(fā)性比較好滴须,CPU內(nèi)存占用低舌狗,如果rewrite頻繁,那還是Apache吧扔水。下面開始上代碼:

負載均衡

nginx給我們提供的簡單算法來實現(xiàn)各個服務(wù)器處理請求的分發(fā)
新建/etc/ngonx/conf.d/mo_service.conf

配置

109.png
47.png
可以寫多個
upstream mo-user{
    server 127.0.0.1:12352;
    server 127.0.0.1:12355;
    server 123.32.0.1:12352;
}

upstream mo-weapp{
    server 127.0.0.1:12353
}

代理 nginx

阿里云>控制臺>域名與網(wǎng)站>云解析DNS>主域名點進去>添加記錄>


4.44.png

3.49.png
server{
    listen 80;
    server_name 127.0.0.1;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      #捕獲客戶端真實IP
![屏幕快照 2018-10-27 下午5.22.41.png](https://upload-images.jianshu.io/upload_images/12529562-0649ded68007e310.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      proxy_set_header X-Real-IP $remote_addr;   # $remote_addr代表客戶端IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    # location 顧名思義痛侍,定位,就是當訪問 / 的時候魔市,nginx會將請求轉(zhuǎn)給本地的8080端口恋日,而后面的設(shè)置都是一些基本的配置膀篮,可以直接用
    location /static {
      alias /home/project/static;
    }
    # 這個就是配置靜態(tài)文件的地方,要用絕對地址岂膳,對應(yīng)最開始的目錄形式誓竿,假設(shè)project就在/home下面,那么這樣配置就可以的了谈截,還有個前提是筷屡,你在開發(fā)的時候,采取了django的建議簸喂,每個app的靜態(tài)文件都用多了一層app_name的文件夾來包住毙死。
}
2.41.png

解釋:有人訪問80端口,我就給轉(zhuǎn)到12255端口喻鳄,自己不用做扼倘,讓12355區(qū)處理

3.00.png

安裝

1. sudo apt install python3-pip
2. sudo pip3 install  virtualenv
3. sudo apt install nginx
4. sudo apt install mysql-server

5.創(chuàng)建虛擬環(huán)境

(1)  mkdir axf 
(2)  cd  axf
(3)  virtualenv venv # 自帶python3

6.啟動虛擬環(huán)境

展示一下目錄結(jié)構(gòu)


1.15.png
source venv/bin/activate
運行以后是這個樣子的
.26.png

7.安裝django

pip install django==1.11.7

8.安裝uwsgi

pip install uwsgi

9.將項目傳到服務(wù)器axf文件夾下

40.png

10.在項目中創(chuàng)建uconfig.ini文件,進入uconfig.ini

27.png
添加代碼如下uconfig.ini
[uwsgi]
# 外部訪問地址,可以指定多種協(xié)議除呵,現(xiàn)在用http便于調(diào)試再菊,之后用socket  #
socket = 0.0.0.0:8000 

# 指向項目目錄
chdir =  /home/xwh/axf/

# flask啟動程序文件
wsgi-file = axf/wsgi.py 

# 這行一定要加上,不然請求時會出現(xiàn)-- unavailable modifier requested: 0 --錯誤提示
plugins = python

# 處理器數(shù)
processes = 1

# 線程數(shù)
threads = 2

!!!注意添加代碼是用下面這個不帶注釋的

[uwsgi]

socket = 0.0.0.0:8000 

chdir =  /home/xwh/axf/

wsgi-file = axf/wsgi.py 

plugins = python

processes = 1

threads = 2

11.接下在配置setting.py

輸入:

 STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')
不寫這個前臺可以訪問颜曾,Admin訪問不了(原因css加載不過來)
collectstatic作用將前臺樣式和后臺樣式塞進去纠拔,不然后臺樣式加載不過來
5.png

:wq

12.執(zhí)行命令

python manage.py collectstatic
en a.png

看到了嗎,collectstatic目錄下就有了css樣式泛豪,進入admin稠诲,也有css樣式,說明加載過來了


到這一步django的配置就結(jié)束了诡曙,接下來就是配置Nginx了

sudo service nginx start # 啟動服務(wù)
sudo service nginx restart # 重啟服務(wù)
sudo service nginx stop #停止服務(wù)

開啟服務(wù)看下效果

sudo service nginx start
50.png

嘿嘿 可以額

13.接下來配置ngnix的配置default文件

cd 到etc/nginx/sites-available
備份default文件
sudo cp default default1
刪除default
sudo rm default
在新建default
sudo vim default
cd /etc/nginx/sites-available
sudo cp default default1
sudo rm default
sudo vim default

看圖吧


6.png

將代碼寫入default

server{
listen  80; # 服務(wù)器監(jiān)聽端口
        server_name 39.106.143.156; # 這里寫你的域名或者公網(wǎng)IP
        location / {
                uwsgi_pass      127.0.0.1:8000; # 轉(zhuǎn)發(fā)端口臀叙,需要和uwsgi配置當中的監(jiān)聽端口一致
                include uwsgi_params; # 導(dǎo)入uwsgi配置
                uwsgi_param UWSGI_PYTHON /home/xwh/axf/py06/; #Python解釋器所在的路徑(這里為虛擬環(huán)境)
                uwsgi_param UWSGI_CHDIR  /home/xwh/axf/;# 自己創(chuàng)建的目錄 項目根目錄
        } 
    location /static{
        alias /home/xwh/axf/collectstatic/;
    }
}

用這個不帶注釋的

server{
listen  80; 
        server_name 39.106.143.156; 
        location / {
                uwsgi_pass      127.0.0.1:8000;
                include uwsgi_params; 
                uwsgi_param UWSGI_PYTHON /home/xwh/axf/venv/;
                uwsgi_param UWSGI_CHDIR  /home/xwh/axf/;
        } 
    location /static{
        alias /home/xwh/axf/collectstatic/;
    }
}
重啟服務(wù)
sodu service nginx restart
14.到axf目錄下
source /venv/bin/activate
uwsgi uconfig.ini

這個樣子


.06.png

回車 跑起來...................


0.png

嘿嘿 ?? 可以額

常出現(xiàn)的問題

*關(guān)閉uwsgi

uwsgi -stop uconfig.ini
# 只有一個好使
uwsgi —stop uconfig.ini

如果關(guān)閉不掉,就殺死它

ps -ef | grep uwsgi
sudo kill -9 進程號
數(shù)據(jù)庫方面在這里不做過多介紹价卤,和開發(fā)模式一樣

問題描述

dajngo admin沒有樣式
admin管理頁面找不到base.css,dashboard.css文件

解決辦法

在settings文件中設(shè)置STATIC_ROOT目錄,該目錄不能在STATICFILES_DIRS中.
然后,執(zhí)行命令

python manage.py collectstatic

執(zhí)行后,django會將STATICFILES_DIRS下的所有文件以及admin所需要用到的js,css,image文件全都放到STATIC_ROOT目錄下.

例如, 像下面這樣寫:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

簡單描述一下這幾個變量的意思
STATIC_URL: 當訪問什么樣的網(wǎng)址時, 按照訪問靜態(tài)文件的方式去查找文件.
STATICFILES_DIRS: 當訪問靜態(tài)文件是, 會在每個app中的static目錄中查找, 然后再從STATICFILES_DIRS設(shè)置的路徑列表中逐一查找.
STATIC_ROOT: 當執(zhí)行python manage.py collectstatic時, 收集的靜態(tài)文件放在該目錄下.
此刻axf下就會多出一個collectstatic的靜態(tài)資源文件目錄

更多可參考: http://python.usyiyi.cn/translate/django_182/ref/settings.html

訪問可能會出現(xiàn)403沒有權(quán)限的問題

找到nginx.conf文件的位置
將第一行的代碼進行修改

#user www-data; 
user root;
或者將 www-data更改權(quán)限
image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹耕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荠雕,更是在濱河造成了極大的恐慌,老刑警劉巖驶赏,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炸卑,死亡現(xiàn)場離奇詭異,居然都是意外死亡煤傍,警方通過查閱死者的電腦和手機盖文,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚯姆,“玉大人五续,你說我怎么就攤上這事洒敏。” “怎么了疙驾?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵凶伙,是天一觀的道長。 經(jīng)常有香客問我它碎,道長函荣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任扳肛,我火速辦了婚禮傻挂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挖息。我一直安慰自己金拒,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布套腹。 她就那樣靜靜地躺著绪抛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沉迹。 梳的紋絲不亂的頭發(fā)上睦疫,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音鞭呕,去河邊找鬼蛤育。 笑死,一個胖子當著我的面吹牛葫松,可吹牛的內(nèi)容都是我干的瓦糕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腋么,長吁一口氣:“原來是場噩夢啊……” “哼咕娄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起珊擂,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤圣勒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摧扇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圣贸,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年扛稽,在試婚紗的時候發(fā)現(xiàn)自己被綠了吁峻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖用含,靈堂內(nèi)的尸體忽然破棺而出矮慕,到底是詐尸還是另有隱情,我是刑警寧澤啄骇,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布痴鳄,位于F島的核電站,受9級特大地震影響肠缔,放射性物質(zhì)發(fā)生泄漏夏跷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一明未、第九天 我趴在偏房一處隱蔽的房頂上張望槽华。 院中可真熱鬧,春花似錦趟妥、人聲如沸猫态。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亲雪。三九已至,卻和暖如春疚膊,著一層夾襖步出監(jiān)牢的瞬間义辕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工寓盗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灌砖,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓傀蚌,卻偏偏與公主長得像基显,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子善炫,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容