ในบทความนี้เราจะตั้งค่า VPS ให้บริการเว็บแอพพลิเคชั่น Python ด้วย Gunicorn และ Nginx เป็น reverse proxy เราใช้ Nginx เป็น reverse proxy แทนที่จะให้บริการกับ Gunicorn โดยตรงเพื่อป้องกันการโจมตี DoS บน Gunicorn การใช้ Nginx ยังส่งผลให้มีประสิทธิภาพที่ดีขึ้น (ด้วยการบัฟเฟอร์พร็อกซี) และส่งผลให้มีการร้องขอมากกว่า
เริ่มต้นใช้งาน
บทช่วยสอนนี้สมมติว่าคุณมี VM พร้อม Ubuntu 14.04 หรือติดตั้งใหม่กว่าอัพเดตและปลอดภัยแล้ว
- อินสแตนซ์ Nginx ของเราจะทำงานบนพอร์ต HTTP 80 (แต่คุณสามารถอัปเกรดเป็น HTTPS ได้อย่างง่ายดาย)
- ตัวอย่างแอพ Python ของเราจะฟังที่พอร์ต 8080 พอร์ตนี้จะถูกปิดบน iptables เพื่อป้องกันการเข้าถึงจากระยะไกล
- บทช่วยสอนนี้ควรทำงานกับ distros อื่น ๆ ที่มีการเปลี่ยนแปลงน้อยที่สุด
ติดตั้งpip
, virtualenv
:
apt-get install python-pip python-virtualenv
ปิดพอร์ต 8080 Gunicorn จะเข้าถึงได้โดย Nginx เท่านั้น
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
สร้างโฟลเดอร์ใหม่และกำหนดค่าแอปพลิเคชันของเรา เราจะใช้ Flask framework
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
สร้างไฟล์แอปพลิเคชัน
nano myapplication.py
วางภายในต่อไปนี้:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
นี่จะสร้างหน้าง่าย ๆ ที่พูดว่า "Hello, Vultr!" เมื่อมีคนเข้าถึงหน้านี้ ตอนนี้เริ่ม Gunicorn แทนที่x
ด้วยจำนวนแกน CPU ของ VM ของคุณ 2 เท่า
gunicorn -w x myapplication:app &
ติดตั้ง Nginx และกำหนดค่า reverse proxy
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
ค้นหาlocation / {
บรรทัดและแทนที่เนื้อหาภายในวงเล็บด้วยเนื้อหาต่อไปนี้
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8000/;
การกำหนดค่านี้สั่งให้ Nginx ส่งต่อข้อมูลบางอย่าง (โปรโตคอล HTTP, ที่อยู่ IP ระยะไกล) พร้อมกับคำขอจริงไปยังเซิร์ฟเวอร์ Gunicorn โหลดซ้ำ Nginx
service nginx reload
ณ จุดนี้แอปพลิเคชั่น Gunicorn ของคุณได้รับการกำหนดค่าอย่างเหมาะสม http://your-vps-ip/
คุณสามารถเข้าถึงได้โดยใช้เว็บเบราเซอร์ที่