raggi24 / devops_1

0 stars 0 forks source link

Отчет по заданию #1 DevOps - знакомство с Nginx: развёртываем web-страницу #1

Closed aykhan247 closed 3 months ago

aykhan247 commented 3 months ago

@DevBoxOps-Mentor

1 DevOps - знакомство с Nginx: развёртываем web-страницу

  1. Устанавливаем nginx с помощью apt (был уже установлен). В директории /etc/nginx/sites-available удаляем default.conf, а также симлинк в sites-enabled. Создаем hw.conf с таким содержанием и создаем симлинк на него в ./sites-enabled/

    server {
        listen      80;
        server_name 326772774284689410-students.devboxops.xyz;
    
    location / {
        root /usr/share/nginx/html;
        index index.html;
        }
    }
  2. Создаем простую страницу по пути /usr/share/nginx/html/index.htlm Тестируем конфигурацию с помощью команды nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful Все ок, рестартим сервис service nginx restart
  3. Проверки
    • curl -ILk http://326772774284689410-students.devboxops.xyz/
      HTTP/1.1 200 OK
      Server: nginx/1.18.0 (Ubuntu)
      Date: Mon, 22 Jul 2024 10:36:40 GMT
      Content-Type: text/html
      Content-Length: 454
      Last-Modified: Mon, 22 Jul 2024 10:29:18 GMT
      Connection: keep-alive
      ETag: "669e347e-1c6"
      Accept-Ranges: bytes
    • 
      curl http://326772774284689410-students.devboxops.xyz/
      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to DevBoxOps!</title>
      <style>
      body {
      width: 35em;
      margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif;
      }
      </style>
      </head>
      <body>
      <h1>HELLO WORLD for DevBoxOps</h1>
      <p>If you see this page, you created your own simple html page! </p>

For hacking, click here hackertyper.com.

Good Job!

``` 4. Добавляем директиву для доступа по HTTPS ```nginx server { listen 443 ssl; server_name demo.myama.pro; ssl_certificate /path/; location / { root /usr/share/nginx/html; index index.html; } } ``` 5. Устанавливаем cerbot Создаем папку `mkdir -p sudo mkdir -p /var/www/html/.well-known/acme-challenge` Меняем конфиг /etc/letsencrypt/cli.ini: ``` max-log-backups = 5 authenticator = webroot webroot-path = /var/www/html text = True ``` Добавляем конфиг /etc/nginx/acme.conf и инклудим его в хост-конфиг `include /etc/nginx/acme.conf` ```nginx location ^~ /.well-known/acme-challenge/ { allow all; root /var/www/html/; default_type "text/plain"; try_files $uri =404; } ``` Выпускаем сертификат командой `certbot certonly --webroot -d 326772774284689410-students.devboxops.xyz` Указываем в конфиге хост конфига путь к сертификатам `ssl_certificate /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz/fullchain.pem;` `ssl_certificate_key /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz/privkey.pem;` 6. Настраиваем редирект, в блоке с http добавляем ``` nginx location / { return 301 https://$host$request_uri; } ``` Итоговый конфиг получается такой: ```nginx server { listen 80; listen [::]:80; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; ssl_certificate /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz/privkey.pem; location / { root /var/www/html; index index.html; } } ``` 7. Не нашел автообновление сертификатов, обычно должна создаваться задача в crontab, но вывод пустой, возможно потому что пакета с crontab нет в системе Обновляем сертифкат с помощью `certbot renew --force-renewal` ```sh certbot renew --force-renewal Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/326772774284689410-students.devboxops.xyz.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Renewing an existing certificate for 326772774284689410-students.devboxops.xyz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all renewals succeeded: /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ``` Удаляем все сертификаты и выпускаем одной командой cli.ini при этом такой: ``` max-log-backups = 5 authenticator = webroot webroot-path = /var/www/html text = True email = ayhan.777@yandex.ru agree-tos = True non-interactive = True preferred-challenges = http ``` 8. Добавляем поддомен proxied в тот же хост конфиг и генерим для него самоподписный сертификат с помощью команды `sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/proxied-students/devboxops.key -out /etc/ssl/proxied-students/devboxops.crt` Итоговый конфиг ```nginx server { listen 80; listen [::]:80; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; ssl_certificate /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz-0001/privkey.pem; location / { root /var/www/html; index index.html; } } server { listen 80; listen [::]:80; server_name 326772774284689410-proxied-students.devboxops.xyz; include acme.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name 326772774284689410-proxied-students.devboxops.xyz; include acme.conf; ssl_certificate /etc/ssl/proxied-students/devboxops.crt; ssl_certificate_key /etc/ssl/proxied-students/devboxops.key; location / { root /var/www/html; index index.html; } ``` Проверяем доступность ```http curl -ILk http://326772774284689410-proxied-students.devboxops.xyz/ HTTP/1.1 301 Moved Permanently Date: Wed, 24 Jul 2024 08:42:29 GMT Content-Type: text/html Content-Length: 167 Connection: keep-alive Cache-Control: max-age=3600 Expires: Wed, 24 Jul 2024 09:42:29 GMT Location: https://326772774284689410-proxied-students.devboxops.xyz/ Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=wJptl1qYbzNUlFYBNu%2Fi4AgeOWh5ItZUgMJggU%2BhHIcqMdIx4%2BvEgKg9bMfNiXLy%2By10vwnCHwFsWzsgqJ83%2Bn17oJkpD1TGK8aSd79jElNZT%2F%2B7dY%2FuWwFqXQ177Zx0P8cPfc59KZlyMIWk%2F5ZJeO0Q%2F7bx3PbWuTdTQGzmfTMHNjAQ"}],"group":"cf-nel","max_age":604800} NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} Server: cloudflare CF-RAY: 8a829dfd0dd32d69-ARN alt-svc: h3=":443"; ma=86400 HTTP/2 200 date: Wed, 24 Jul 2024 08:42:29 GMT content-type: text/html last-modified: Mon, 22 Jul 2024 15:58:28 GMT cf-cache-status: DYNAMIC report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=LP39z25og%2FHMXRiwgj9YtjbVr7RXquZIkNknqqJ8WyAH60vA6JhSQsb20yeK%2F9ehwi3BI7cS4VfFT59j0BaKKCnbFBrarcSXeWmmBBm1lMQRPj3AeBxU7y%2F7ZFDAys8yFjYiSJ5Jj8HIQbaSGBeQ%2Fdwul6phhlGo1qrR0aV7mznAHNny"}],"group":"cf-nel","max_age":604800} nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} server: cloudflare cf-ray: 8a829dfef94092f7-CPH alt-svc: h3=":443"; ma=86400 ``` 9. Логи - в секции http в nginx.conf добавляем формат лога devops ` log_format devops '[$time_local] - $remote_addr - "$request" $status "$http_referer" "$http_user_agent" "$content_type"';` Далее в секции server хост конфига proxied добавляем вывод лога в отдельный файл `access_log /var/log/nginx/devops/devops.access.log devops;` Чтобы приходил реальный ip, добавляем параметры в хост конфиг ```nginx location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; ``` А так же добавляем в nginx.conf ```nginx # Задаёт поле заголовка запроса, значение которого будет использоваться для замены адреса клиента. real_ip_header X-Forwarded-For; real_ip_recursive on; # Задаёт доверенные адреса, которые передают верный адрес для замены. # Список диапазонов ip-адресов CloudFlare: https://www.cloudflare.com/ips/ 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 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; ``` Выводим в логах свой запрос с реальным ip ``` tail -f /var/log/nginx/devops/devops.access.log [24/Jul/2024:12:34:20 +0300] - 45.15.113.33 - "HEAD / HTTP/1.1" 200 "-" "curl/8.6.0" "-" [24/Jul/2024:12:34:31 +0300] - 45.15.113.33 - "GET / HTTP/1.1" 304 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100 101 Firefox/128.0" "-" ``` Итоговый хост конфиг: ```nginx server { listen 80; listen [::]:80; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name 326772774284689410-students.devboxops.xyz; include acme.conf; ssl_certificate /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/326772774284689410-students.devboxops.xyz-0001/privkey.pem; location / { root /var/www/html; index index.html; } } server { listen 80; listen [::]:80; server_name 326772774284689410-proxied-students.devboxops.xyz; include acme.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name 326772774284689410-proxied-students.devboxops.xyz; include acme.conf; ssl_certificate /etc/ssl/proxied-students/devboxops.crt; ssl_certificate_key /etc/ssl/proxied-students/devboxops.key; access_log /var/log/nginx/devops/devops.access.log devops; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 10. Проверка сайта через curl ❯ curl -ILk https://326772774284689410-students.devboxops.xyz/ HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Wed, 24 Jul 2024 09:43:03 GMT Content-Type: text/html Content-Length: 459 Last-Modified: Mon, 22 Jul 2024 15:58:28 GMT Connection: keep-alive ETag: "669e81a4-1cb" Accept-Ranges: bytes ❯ curl -ILk https://326772774284689410-proxied-students.devboxops.xyz/ HTTP/2 200 date: Wed, 24 Jul 2024 09:43:08 GMT content-type: text/html last-modified: Mon, 22 Jul 2024 10:29:18 GMT cf-cache-status: DYNAMIC report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=kaPst2xDYoLbvHI4cj2H6fTuerHaS0smJ1%2Bgjtr6CagvmELJb2Wu4vI4YETvHQikfQEDCiEe09%2FibtLd5I11rm5%2FyOwuhpNtSucoAAj9CTmIRBF%2FX9Dz5lRT3%2FNj9EnKK43DURPXro4oB84IAvgDIHi6E9dlGLctrqe0K%2BoRKgTnTPJO"}],"group":"cf-nel","max_age":604800} nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} server: cloudflare cf-ray: 8a82f6d4ac2dbbfe-FRA alt-svc: h3=":443"; ma=86400
DevBoxOps-Mentor commented 3 months ago

@aykhan247 все круто, но вот пара замечений:

DevBoxOps-Mentor commented 3 months ago

@aykhan247 можешь закрывать