一個django項目最基本的目錄結構以下 /root/blog/javascript
blog ├── manage.py ├── blog │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── apps ├── static └── templates
apps 目錄爲應用目錄,若是須要將該目錄下的應用在配置文件中進行有效的註冊,以及在項目下的urls.py中路由到應用須要在settings.py中進行路徑的配置php
使用django自帶的服務器進行項目的測試 ,進入manage.py文件所在目錄下:css
python ./manage.py runserver 127.0.0.1:8080
若是項目的運行還須要啓動其餘服務,也先將其進行啓動, 如celery, redis, mysql, kafka,rabbitmq等項目中使用到的各類服務器html
而後請求項目中的某個API,測試部署是否成功java
pip install uwsgi。
[uwsgi]
#使用nginx調度度服務器鏈接該uwsgi服務器時使用如下項 socket=127.0.0.1:8000
#直接使用uwsgi服務器作web服務器時使用如下項,服務器的ip和端口 # http=127.0.0.1:8000
#項目目錄, 指定到項目的目錄名稱(通常就是manage.py文件所在目錄的目錄名) chdir=/root/blog/
#項目中wsgi.py文件的目錄,相對於項目目錄(相對目錄) wsgi-file = blog/wsgi.py
# 啓動4個uwsgi進程 processes=4
# uwsgi進程中的線程數 threads=2
# 進程設置,無需變更 master=True
# 啓動服務器以後會生成文件uwgi.pid,在哪一個目錄啓動,就會在哪一個目錄生成和文件 pidfile=uwsgi.pid
# 服務器啓動以後在後臺運行,會生成文件uwsgi.log daemonize=uwsgi.log
# 指定虛擬環境的目錄 進入虛擬環境後可使用which python 查看到虛擬環境所在路徑 virtualenv=/home/python/.virtualenvs/django_env_python3uwsgiuwsgi.piduswgi.log
DEBUG=FALSE
ALLOWED_HOSTS=[‘*’]
進入目錄: /root/blog/uWSGI_setting_file/node
uwsgi
在哪一個目錄啓動,就會在哪一個目錄生成uwsgi.pid
和uswgi.log
文件。python
# 啓動:(先將django自帶的server服務器中止運行) uwsgi --ini uwsgi.ini # 中止: uwsgi --stop uwsgi.pid # 重啓: uwsgi --reload uwsgi.pid # 強制中止: killall -9 uwsgi
這裏咱們啓動uwsgi服務,能夠經過 ps -ef | grep uwsgi
看到已經有四個uwsgi服務啓動。mysql
訪問項目中的某個API,測試服務器是否運行成功nginx
sudo apt-get install nginx
在服務器上建立目錄結構:/root/var/blog
web
修改目錄權限:sudo chmod 777 /root/var/blog
進入目錄: /root/var/blog/,
而後建立static
目錄: mkdir static
在配置文件setttings.py中進行配置
# 若是DEBUG=True -> 使用項目目錄下static內的靜態文件 也就是STATIC_URL 所指向的路徑
# 若是DEBUG=False -> 使用STATIC_ROOT指定目錄下的靜態文件
STATIC_URL = '/static/'
STATIC_ROOT = '/root/var/blog/static/'
# 設置靜態文件查找目錄,在終端使用命令收集到項目的靜態文件後,再去配置nginx服務器尋找靜態文件的路徑
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
# 若是是home路徑下則須要先設置目錄權限
# 在模板中使用 fileObj.fileFieldName.url 表明網絡可訪問的資源路徑
MEDIA_URL = '/media/' # 表明訪問media的url路徑,例如 127.0.0.1/media/1.png
# 不管是否debug,都會訪問此路徑下的media資源(包括上傳和訪問)
MEDIA_ROOT = '/var/www/NickBlog/media/'
python manage.py collectstatic
進入目錄/etc/nginx/sites-enabled/
中能夠看到一個default
文件,修改default
文件爲以下內容
# site_nginx.conf # the upstream component nginx needs to connect to upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket # 設置本地服務的端口 server 127.0.0.1:8000; # for a web port socket (we'll use this first) } # configuration of the server server { # the port your site will be served on # 監聽主機的端口 listen 80; # the domain name it will serve for # server_name .liqian.ink; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # 設置媒體文件目錄 # Django media location /media { alias /root/var/blog/media; # your Django project's media files - amend as required } # 設置靜態文件目錄 location /static { alias /root/var/blog/static; # your Django project's static files - amend as required } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include uwsgi_params; # the uwsgi_params file you installed } }
啓動服務:nginx 查看版本:nginx -v 重啓服務:nginx -s reload 中止服務:nginx -s stop
發現一個問題,在另一臺機器上部署的時候沒法成功進入django進程。
將/etc/nginx/nginx.conf
內容設置爲以下內容後,重啓成功
user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #}
在關於高併發負載均衡一文中已經提到,企業在解決高併發問題時,通常有兩個方向的處理策略,軟件、硬件,硬件上添加負載均衡器分發大量請求,軟件上可在高併發瓶頸處:數據庫+web服務器兩處添加解決方案,其中web服務器前面一層最經常使用的的添加負載方案就是使用nginx實現負載均衡。
1、負載均衡的做用
一、轉發功能
按照必定的算法【權重、輪詢】,將客戶端請求轉發到不一樣應用服務器上,減輕單個服務器壓力,提升系統併發量。
二、故障移除
經過心跳檢測的方式,判斷應用服務器當前是否能夠正常工做,若是服務器期宕掉,自動將請求發送到其餘應用服務器。
三、恢復添加
如檢測到發生故障的應用服務器恢復工做,自動將其添加處處理用戶請求隊伍中。
2、Nginx實現負載均衡
一樣使用兩個tomcat模擬兩臺應用服務器,端口號分別爲8080 和8081
一、Nginx的負載分發策略
Nginx 的 upstream目前支持的分配算法:
1)、輪詢 ——1:1 輪流處理請求(默認)
每一個請求按時間順序逐一分配到不一樣的應用服務器,若是應用服務器down掉,自動剔除,剩下的繼續輪詢。
2)、權重 ——you can you up
經過配置權重,指定輪詢概率,權重和訪問比率成正比,用於應用服務器性能不均的狀況。
3)、ip_哈希算法
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個應用服務器,能夠解決session共享的問題。
二、配置Nginx的負載均衡與分發策略
經過在upstream參數中添加的應用服務器IP後添加指定參數便可實現,如:
/etc/nginx/nginx.conf
upstream tomcatserver1 { # tomcatserver1 這參數須要和 proxy_pass 定義的變量保持一致 server 192.168.72.49:8080 weight=3; 權重3 server 192.168.72.49:8081; } server { listen 80; server_name 8080.max.com; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcatserver1; index index.html index.htm; 訪問主頁時請求的靜態文件 } } 複製代碼
經過以上配置,即可以實現,在訪問8080.max.com這個網站時,因爲配置了proxy_pass地址,全部請求都會先經過nginx反向代理服務器,在服務器將請求轉發給目的主機時,讀取upstream爲 tomcatsever1的地址,讀取分發策略,配置tomcat1權重爲3,因此nginx會將大部分請求發送給49服務器上的tomcat1,也就是8080端口;較少部分給tomcat2來實現有條件的負載均衡,固然這個條件就是服務器一、2的硬件指數處理請求能力。
三、nginx其餘配置
upstream myServer { server 192.168.72.49:9090 down; server 192.168.72.49:8080 weight=2; server 192.168.72.49:6060; server 192.168.72.49:7070 backup; }
1)down
表示單前的server暫時不參與負載
2)Weight
默認爲1.weight越大,負載的權重就越大。
3)max_fails
容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4)fail_timeout
max_fails 次失敗後,暫停的時間。
5)Backup
其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。
3、使用Nginx的高可用
除了要實現網站的高可用,也就是提供n多臺服務器用於發佈相同的服務,添加負載均衡服務器分發請求以保證在高併發下各臺服務器能相對飽和的處理請求。一樣,負載均衡服務器也須要高可用,以防若是負載均衡服務器掛掉了,後面的應用服務器也紊亂沒法工做。
實現高可用的方案:添加冗餘。添加n臺nginx服務器以免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用
4、總結
總結一點,負載均衡不管是各類軟件或硬件上的解決方案,主要仍是將大量的併發請求按照必定的規律分發給不一樣的服務器處理,從而減小某臺服務器的瞬時壓力,提升網站的抗併發能力。nginx在負載均衡的應用之因此普遍,筆者認爲這歸功於它的靈活配置,一個nginx.conf文件解決大部分問題,不管是nignx建立虛擬服務器、nginx的反向代理服務器,仍是本文介紹的nginx的負載均衡,幾乎都在這個配置文件中進行。服務器上只負責把nginx搭好,跑起來便可。並且它自己輕量級,不須要佔用服務器太多資源就能夠達到較好的效果
注意:
模板/視圖/URL/配置
文件,都須要重啓uwsgi
服務。Nginx
配置文件,都須要重啓Nginx
服務。
原文地址: http://www.javashuo.com/article/p-tunrxqwz-be.html https://blog.csdn.net/weixin_39198406/article/details/79277580