從Apache2換到nginx並且使用uwsgi+Flask

起因

一開始我在雲服務器上使用Flask作爲小程序的後臺服務器,然後直接運行Python腳本(爲了能夠在後臺運行,使用 screen),但是發現Flask並不穩定,運行一段時間後似乎會自動失去端口,然後出現無法訪問的情況。爲了解決這個問題,我打算採用 Nginx 作爲後端服務器,然後用 Uwsgi 將其和 Flask 應用連接起來。

安裝和配置Nginx

安裝十分簡單,一般來說只需要sudo apt-get install nginx就可以,注意在安裝前需要先停止Apache2的服務,否則將會安裝失敗(可能是因爲80端口被佔用)。

Nginx的默認的配置文件在 /etc/nginx 下。啓動方法是直接 sudo nginx,停止方法則是sudo nginx -s stop

把wordpress應用從Apache2遷移到Nginx

因爲一開始的個人博客是用Apache2作爲http服務器的,所以現在要遷移到Nginx上。首先需要安裝 php-fpm,直接使用sudo apt-get install php-fpm即可安裝。

php-fpm(FastCGI Process Manager) 是一個用於在服務器和php後端數據交互的接口,讓服務器(Nginx)直到,對於 *.php 文件,首先要給php解釋器執行,然後把結果傳回服務器,再返回給請求者。CGI實現了這個接口,FastCGI以更快地方式實現,而php-fpm也就是一個fastCGI的php官方版本。

安裝之後,php7.0-fpm成爲系統服務,在/etc/init.d文件夾下。可以用sudo service php7.0-fpm start啓動,這樣php-fpm就開始監聽了。php7.0-fpm的配置文件在/etc/php/7.0/fpm下。

然後要修改Nginx的配置文件,在/etc/nginx目錄下,首先要在nginx.conf的http項里加入

upstream php
{
    server unix:/run/php/php7.0-fpm.sock
}

然後在sites-available/default中加入

server {
	listen	80;
	server_name	xxx.com; //你的域名,如果有多個域名可以用空格分開
	root	/var/www/wordpress-1; //網站的根文件夾
	index	index.php; //首頁地址
	location / {
		try_files $uri $uri/ /index.php?$args;
	}
	//處理php文件
	location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass php;  
        //如果前面沒有定義upstream,那麼和  fastcgi_pass unix:/run/php/php7.0-fpm.sock是一樣的
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;	
	}
}

這個upstream 其實是一個負載均衡的辦法,詳見官方文檔Using nginx as HTTP load balancer

這個配置文件裏 localtion ~ \.php$項的意思大概是,把php文件轉發給一個地址,既可以是遠程地址,也可以是本地地址,這裏因爲默認的 /etc/php/7.0/fpm/pool.d/www 裏面設置了listen = /run/php/php7.0-fpm.sock,表明php文件應該轉移到這個本地的socket文件裏。

Uwsgi配置

首先創建任意一個配置文件,比如uwsgi.ini

[uwsgi]
http=127.0.0.1:8888
wsgi-file=xxx(你的python文件,必須包含Flask)
callable=app
touch-reload=/home/ubuntu/tutorServer/

然後按照如下命令啓動

sudo uwsgi --ini uwsgi.ini

就可以啓動uwsgi了。

再在nginx.conf裏面加入

server {
	listen	443;
	server_name	ustczf.com;
	(實現https)
	ssl on;
    ssl_certificate xxx.crt;
    ssl_certificate_key xxx.key;
	location /{
		proxy_pass	http://127.0.0.1:8888;
	}
}

重啓 nginx 就可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章