Ubuntu安裝Nginx和正確卸載Nginx Nginx相關

1.Ubuntu下安裝Nginx比較簡單

敲入下列命令便可:html

    sudo apt-get update sudo apt-get install nginx

 

 

2.Ubuntu下卸載,稍不注意就會入坑

 

    sudo apt-get remove nginx nginx-common # 卸載刪除除了配置文件之外的全部文件。
 sudo apt-get purge nginx nginx-common # 卸載全部東東,包括刪除配置文件。
 sudo apt-get autoremove # 在上面命令結束後執行,主要是卸載刪除Nginx的再也不被使用的依賴包。
 sudo apt-get remove nginx-full nginx-common #卸載刪除兩個主要的包。

  sudo service nginx restart #重啓nginx

 

上面的命令基本上都能解決你在Ubuntu下安裝卸載Nginx的問題。前端

 

 

3.查看nginx進程

ps aux|grep nginx

在虛擬環境下安裝uwsgi
pip install uwsgi

######啓動Nginx服務 [root@typecodes ~]# service nginx start ######中止Nginx服務 [root@typecodes ~]# service nginx stop ######重啓Nginx服務 [root@typecodes ~]# service nginx restart ######Nginx服務的狀態 [root@typecodes ~]# service nginx status ######在Nginx服務啓動的狀態下,從新加載nginx.conf這個配置文件 [root@typecodes ~]# service nginx reload




 

 

 

 

 

 

 Django的部署能夠有不少方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。node

  在這種方式中,咱們的一般作法是,將nginx做爲服務器最前端,它將接收WEB的全部請求,統一管理請求。nginx把全部靜態請求本身來處理(這是NGINX的強項)。而後,NGINX將全部非靜態請求經過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。python

  可見,uwsgi的做用就相似一個橋接器。起到橋樑的做用。nginx

  Linux的強項是用來作服務器,因此,下面的整個部署過程咱們選擇在Ubuntu下完成。web

 

1、安裝Nginx                                                                        

   Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好。django

   Nginx一樣爲當前很是流行的web服務器。利用其部署Django,咱們在此也作簡單的介紹。ubuntu

   Nginx官網:http://nginx.org/c#

   打開ubuntu控制檯(ctrl+alt+t)利用Ubuntu的倉庫安裝。服務器

fnngj@ubuntu:~$ sudo apt-get install nginx  #安裝

  啓動Nginx:

fnngj@ubuntu:~$ /etc/init.d/nginx start  #啓動
fnngj@ubuntu:~$ /etc/init.d/nginx stop  #關閉
fnngj@ubuntu:~$ /etc/init.d/nginx restart  #重啓

  

  修改Nginx默認端口號,打開/etc/nginx/nginx.conf 文件,修改端口號。

複製代碼
 server {
    listen       8088;    # 修改端口號
    server_name  localhost;

    #charset koi8-r; 

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }
複製代碼

   大概在文件36行的位置,將默認的80端口號改爲其它端口號,如 8088。由於默認的80端口號很容易被其它應用程序佔用。

   而後,經過上面命令重啓nginx。訪問:http://127.0.0.1:8088/

  

  若是出現如上圖,說明Nginx啓動成功。

  

2、安裝uwsgi                                                            

 經過pip安裝uwsgi。

root@ubuntu:/etc# python3 -m pip install uwsgi

 

測試uwsgi,建立test.py文件:

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

 

經過uwsgi運行該文件。

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

     

 

  接下來配置Django與uwsgi鏈接。此處,假定的個人django項目位置爲:/home/fnngj/pydj/myweb

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --chdir /home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

 

經常使用選項:

http : 協議類型和端口號

processes : 開啓的進程數量

workers : 開啓的進程數量,等同於processes(官網的說法是spawn the specified number ofworkers / processes)

chdir : 指定運行目錄(chdir to specified directory before apps loading)

wsgi-file : 載入wsgi-file(load .wsgi file)

stats : 在指定的地址上,開啓狀態服務(enable the stats server on the specified address)

threads : 運行線程。因爲GIL的存在,我以爲這個真心沒啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 容許主進程存在(enable master process)

daemonize : 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器(daemonize uWSGI)。實際上最經常使用的,仍是把運行記錄輸出到一個本地文件上。

pidfile : 指定pid文件的位置,記錄主進程的pid號。

vacuum : 當服務器退出的時候自動清理環境,刪除unix socket文件和pid文件(try to remove all of the generated file/sockets)

 

3、Nginx+uwsgi+Django                                         

  接下來,咱們要將三者結合起來。首先羅列一下項目的所須要的文件:

myweb/

├── manage.py

├── myweb/

│   ├── __init__.py

│   ├── settings.py

│   ├── urls.py

│   └── wsgi.py

└── myweb_uwsgi.ini

  在咱們經過Django建立myweb項目時,在子目錄myweb下已經幫咱們生成的 wsgi.py文件。因此,咱們只須要再建立myweb_uwsgi.ini配置文件便可,固然,uwsgi支持多種類型的配置文件,如xml,ini等。此處,使用ini類型的配置。

複製代碼
# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8000

# the base directory (full path)
chdir           = /home/fnngj/pydj/myweb

# Django s wsgi file
module          = myweb.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
複製代碼

   這個配置,其實就至關於在上一小節中經過wsgi命令,後面跟一堆參數的方式,給文件化了。

  socket  指定項目執行的端口號。

  chdir   指定項目的目錄。

  module  myweb.wsgi ,能夠這麼來理解,對於myweb_uwsgi.ini文件來講,與它的平級的有一個myweb目錄,這個目錄下有一個wsgi.py文件。

  其它幾個參數,能夠參考上一小節中參數的介紹。

 

  接下來,切換到myweb項目目錄下,經過uwsgi命令讀取myweb_uwsgi.ini文件啓動項目。

複製代碼
fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini 
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2016] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
複製代碼

   注意查看uwsgi的啓動信息,若是有錯,就要檢查配置文件的參數是否設置有誤。

 

   再接下來要作的就是修改nginx.conf配置文件。打開/etc/nginx/nginx.conf文件,添加以下內容。 

複製代碼
……
server {
    listen         8099; 
    server_name    127.0.0.1 
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/fnngj/pydj/myweb/static/;
     }
 }
……
複製代碼

    listen 指定的是nginx代理uwsgi對外的端口號。

  server_name  網上大多資料都是設置的一個網址(例,www.example.com),我這裏若是設置成網址沒法訪問,因此,指定的到了本機默認ip。

  在進行配置的時候,我有個問題一直想不通。nginx究竟是如何uwsgi產生關聯。如今看來大概最主要的就是這兩行配置。

  include uwsgi_params;

  uwsgi_pass 127.0.0.1:8000;

  include 必須指定爲uwsgi_params;而uwsgi_pass指的本機IP的端口與myweb_uwsgi.ini配置文件中的必須一直。

 

  如今從新啓動nginx,翻看上面重啓動nginx的命令。而後,訪問:http://127.0.0.1:8099/

  經過這個IP和端口號的指向,請求應該是先到nginx的。若是你在頁面上執行一些請求,就會看到,這些請求最終會轉到uwsgi來處理。

  

 

=============

ps: 這個過程本應不算複雜,以前花兩天時間沒搞定,索性放到了一邊,此次又花了兩天時間纔算搞定。網上搜到的文章比較亂,有些太簡單的看不懂,有些又太囉嗦的不知道核心的幾步是什麼,但願本文能幫到你。

相關文章
相關標籤/搜索