起因
一開始我在雲服務器上使用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 就可以。