Une note sur ma propre AMI lors de la création d'un serveur API avec Python. Je n'aime pas les portes dérobées, donc je ne pense pas que les autres les utiliseront, mais si quelqu'un les utilise, veuillez le faire à vos risques et périls.
Je vous serais reconnaissant si vous pouviez signaler les mauvais paramètres.
nginx, gunicorn est inclus.
En gros, gunicorn est démarré sur le port 8000 en utilisant Upstart, et le proxy inverse est effectué avec nginx.
Il est créé en supposant que plusieurs projets seront hébergés en tant que serveur de développement, et la structure de dossiers pour chaque projet est la suivante.
/home/www/
└── somedomain
├── api_server
│ ├── virtualenv
│ ├── pip.txt
│ └── python
│ └── server.py
└── web
└── htdocs
└── index.html
www
est l'utilisateur exécutant * nginx * ou le serveur API.
On a l'impression que le nombre de dossiers «un domaine» augmente pour chaque projet.
L'ID AMI public est ʻami-24486d4a`. Je dois m'assurer de ne pas insérer accidentellement une AMI différente.
Ouvrez la console EC2.
Cliquez sur AMI dans le menu de gauche, définissez la barre de recherche d'image sur * image publique *, et saisissez ʻami-24486d4a` dans le champ de recherche pour faire apparaître l'image.
Cliquez avec le bouton droit pour commencer.
Les fichiers falsifiés sont les suivants.
/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;
}
J'ai oublié de supprimer l'option selon laquelle la version du serveur est incluse dans la réponse, j'ai donc ajouté ce paramètre dans la directive http.
server_tokens off;
Mettons à jour l'AMI lorsque les corrections sont collectées.
Même si vous utilisez CloudFlare, l'adresse IP d'origine est définie de manière à ne pas changer. Pour plus d'informations, cliquez ici (https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-).
__pull_from_bitbucket
réduit la source d'accès par l'adresse IP de * Bitbucket * lors du déploiement avec Bitbucket.
Si vous n'utilisez pas Bitbucket, désactivez-le.
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 est une variable d'environnement utilisée lors du Déploiement avec GitHub. Lorsque vous n'utilisez pas GitHub, supprimez-le.
/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
de l'utilisateur.Le dossier pour le contenu statique est web
, et le dossier pour Python est ʻapi_server`.
#Commencez
sudo /etc/init.d/nginx start
#Arrêtez
sudo /etc/init.d/nginx stop
#Redémarrer
sudo /etc/init.d/nginx restart
#Commencez
sudo start somedomain-api-server
#Arrêtez
sudo stop somedomain-api-server
#Redémarrer
sudo restart somedomain-api-server
Recommended Posts