Ein Hinweis zu meinem eigenen AMI beim Erstellen eines API-Servers mit Python. Ich möchte keine Hintertür haben, daher denke ich nicht, dass sie von anderen benutzt wird, aber wenn jemand sie benutzt, tun Sie dies bitte auf eigenes Risiko.
Ich würde mich freuen, wenn Sie auf schlechte Einstellungen hinweisen könnten.
Nginx, Gunicorn ist enthalten.
Grob gesagt wird Gunicorn auf Port 8000 mit Upstart gestartet, und Reverse Proxy wird mit Nginx ausgeführt.
Es wird unter der Annahme erstellt, dass mehrere Projekte als Entwicklungsserver gehostet werden und die Ordnerstruktur für jedes Projekt wie folgt lautet.
/home/www/
└── somedomain
├── api_server
│ ├── virtualenv
│ ├── pip.txt
│ └── python
│ └── server.py
└── web
└── htdocs
└── index.html
"www" ist der Benutzer, auf dem * nginx * oder der API-Server ausgeführt wird. Es fühlt sich so an, als würde die Anzahl der "Somedomain" -Ordner mit jedem Projekt zunehmen.
Die öffentliche AMI-ID lautet "ami-24486d4a". Ich muss sicherstellen, dass ich nicht versehentlich einen anderen AMI einfüge.
Öffnen Sie die EC2-Konsole.
Klicken Sie im linken Menü auf AMI, setzen Sie die Bildsuchleiste auf * öffentliches Bild * und geben Sie "ami-24486d4a" in das Suchfeld ein, um das Bild aufzurufen.
Klicken Sie mit der rechten Maustaste, um zu starten.
Die manipulierten Dateien lauten wie folgt.
/etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
index index.html index.htm;
}
Ich habe vergessen, die Option zu entfernen, dass die Serverversion in der Antwort enthalten ist, und habe diese Einstellung in der http-Direktive hinzugefügt.
server_tokens off;
Lassen Sie uns den AMI aktualisieren, wenn die Korrekturen gesammelt wurden.
Selbst wenn Sie CloudFlare verwenden, wird die ursprüngliche IP so festgelegt, dass sie sich nicht ändert. Weitere Informationen finden Sie hier (https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-).
__pull_from_bitbucket
schränkt die Zugriffsquelle durch die IP-Adresse von * Bitbucket * bei [Bereitstellung mit Bitbucket] ein (http://qiita.com/polikeiji/items/fc6f9bbe7a619a053319).
Wenn Sie Bitbucket nicht verwenden, schalten Sie es aus.
nginx:/etc/nginx/conf.d/somedomain.conf
upstream somedomain_api_server {
server 127.0.0.1:8000 fail_timeout=0;
}
server {
listen 80;
server_name somedomain;
root /home/www/somedomain/web/htdocs;
#charset koi8-r;
# for CloudFlare
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
real_ip_header CF-Connecting-IP;
access_log /var/log/nginx/somedomain.access.log main;
location /__pull_from_bitbucket {
satisfy any;
allow 131.103.20.160/27;
allow 165.254.145.0/26;
allow 104.192.143.0/24;
allow 220.156.98.58/32;
deny all;
try_files $uri $uri/ @proxy_to_app;
}
location / {
try_files $uri $uri/ @proxy_to_app;
add_header Cache-Tag main;
}
location @proxy_to_app {
satisfy any;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
#proxy_buffering off;
proxy_pass http://somedomain_api_server;
}
}
GITHUB_HOOK_SECRET ist eine Umgebungsvariable, die beim [Bereitstellen mit GitHub] verwendet wird (http://qiita.com/polikeiji/items/fc6f9bbe7a619a053319). Wenn Sie GitHub nicht verwenden, löschen Sie es.
/etc/init/somedomain-api-server.conf
description "Somedomain API Server"
start on runlevel [2345]
stop on runlevel [016]
# GitHub Hook Secret
env GITHUB_HOOK_SECRET=""
respawn
exec /home/www/somedomain/api_server/virtualenv/bin/gunicorn -b 127.0.0.1:8000 -w 4 -u www --chdir /home/www/somedomain/api_server/python --log-file /home/www/somedomain/api_server/logs/error_log --pythonpath /home/www/somedomain/api_server/python server:application
/ home / www / somedomain
des Benutzers.Der Ordner für statischen Inhalt ist "web" und der Ordner für Python ist "api_server".
api_server / virtualenv
.#Anlaufen
sudo /etc/init.d/nginx start
#Halt
sudo /etc/init.d/nginx stop
#Starten Sie neu
sudo /etc/init.d/nginx restart
#Anlaufen
sudo start somedomain-api-server
#Halt
sudo stop somedomain-api-server
#Starten Sie neu
sudo restart somedomain-api-server
Recommended Posts