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