Plesk + Python Flask — настройка прокси на втором веб-сайте не работает

У меня проблема, когда я запускаю два веб-сайта python flask. Переадресация портов не работает для второго сайта.

Моими отправными точками являются два HTML-сайта hello-world, доступные через доменные имена. Я удалил файлы индекса HTML и запустил колбу python.

waitress-serve --port 8080 --call "mysite_1:myflaskentrypoint"

mysite_1.com:8080 -> доступно (пока нормально)

Я ввел следующую конфигурацию в Plesk -> Главная -> Домены -> mysite_1 -> Настройки Appache и nginx -> Дополнительные директивы nginx.

location / {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://0.0.0.0:8080;
}

https://mysite_1.com доступен (отлично)

Теперь проблема со вторым сайтом.

waitress-serve --port 9080 --call "mysite_2:myflaskentrypoint"

mysite_2.com:9080 -> доступно (пока нормально)

Plesk -> Главная -> Домены -> mysite_2 -> Настройки Appache и nginx -> Дополнительные директивы nginx.

location / {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://0.0.0.0:9080;
}

https://mywebsite_2.com доступен -> ОШИБКА 403 Запрещено

Журнал ошибок

403 GET / HTTP/2.0      Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) ...    795 nginx 
SSL/TLS access
Error   ...     11691#0: *386 directory index of "/var/www/vhosts/<mysite_2>.de/httpdocs/" 
is forbidden                nginx error

Любые подсказки приветствуются

----
nginx -T

root@localhost:~# nginx -T
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:

#user  nginx;
worker_processes  1;

#error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

#pid        /var/run/nginx.pid;

include /etc/nginx/modules.conf.d/*.conf;

events {
    worker_connections  1024;
}


http {
    include       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;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #tcp_nodelay        on;

    #gzip  on;
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;
}

# override global parameters e.g. worker_rlimit_nofile
include /etc/nginx/*global_params;

# configuration file /etc/nginx/mime.types:

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

# configuration file /etc/nginx/conf.d/ssl.conf:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

# configuration file /etc/nginx/conf.d/zz010_psa_nginx.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
include /etc/nginx/plesk.conf.d/server.conf;
include /etc/nginx/plesk.conf.d/webmails/*.conf;
include /etc/nginx/plesk.conf.d/vhosts/*.conf;
include /etc/nginx/plesk.conf.d/forwarding/*.conf;
include /etc/nginx/plesk.conf.d/wildcards/*.conf;
# configuration file /etc/nginx/plesk.conf.d/server.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

include "/etc/nginx/plesk.conf.d/ip_default/*.conf";

server {
    listen <vps_ip>:443 ssl;

    ssl_certificate             /opt/psa/var/certificates/scfK6DJ8w;
    ssl_certificate_key         /opt/psa/var/certificates/scfK6DJ8w;

    location ^~ /plesk-site-preview/ {
        proxy_pass http://127.0.0.1:8880;
        proxy_set_header Host               plesk-site-preview.local;
        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;
        proxy_cookie_domain plesk-site-preview.local $host;
        access_log off;
    }

    location / {
        proxy_pass https://<vps_ip>:7081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen <vps_ip>:80;

    location ^~ /plesk-site-preview/ {
        proxy_pass http://127.0.0.1:8880;
        proxy_set_header Host               plesk-site-preview.local;
        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;
        proxy_cookie_domain plesk-site-preview.local $host;
        access_log off;
    }

    location / {
        proxy_pass http://<vps_ip>:7080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# configuration file /etc/nginx/plesk.conf.d/ip_default/<website_1>.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
server {
    listen <vps_ip>:443 ssl;

    ssl_certificate             /opt/psa/var/certificates/scf9FAuU9;
    ssl_certificate_key         /opt/psa/var/certificates/scf9FAuU9;

    server_name www.<website_1>;

    location / {
        return 301 https://<website_1>$request_uri;
    }

}

server {
    listen <vps_ip>:443 default_server ssl http2;

    server_name <website_1>;
    server_name ipv4.<website_1>;

    ssl_certificate             /opt/psa/var/certificates/scf9FAuU9;
    ssl_certificate_key         /opt/psa/var/certificates/scf9FAuU9;

    error_page 400 "/error_docs/bad_request.html";
    error_page 401 "/error_docs/unauthorized.html";
    error_page 403 "/error_docs/forbidden.html";
    error_page 404 "/error_docs/not_found.html";
    error_page 500 "/error_docs/internal_server_error.html";
    error_page 405 "/error_docs/method_not_allowed.html";
    error_page 406 "/error_docs/not_acceptable.html";
    error_page 407 "/error_docs/proxy_authentication_required.html";
    error_page 412 "/error_docs/precondition_failed.html";
    error_page 414 "/error_docs/request_uri_too_long.html";
    error_page 415 "/error_docs/unsupported_media_type.html";
    error_page 501 "/error_docs/not_implemented.html";
    error_page 502 "/error_docs/bad_gateway.html";
    error_page 503 "/error_docs/maintenance.html";

    location ^~ /error_docs {
        root "/var/www/vhosts/<website_1>";
    }

    client_max_body_size 128m;

    root "/var/www/vhosts/<website_1>/httpdocs";
    access_log "/var/www/vhosts/system/<website_1>/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/<website_1>/logs/proxy_error_log";

    location ^~ /plesk-site-preview/ {
        proxy_pass http://127.0.0.1:8880;
        proxy_set_header Host               plesk-site-preview.local;
        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;
        proxy_cookie_domain plesk-site-preview.local $host;
        access_log off;
    }

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    #extension sslit begin

    #extension sslit end

    location ~ /\.ht {
        deny all;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        auth_basic "Domain statistics";
        auth_basic_user_file "/var/www/vhosts/system/<website_1>/pd/d..httpdocs@plesk-stat";
        autoindex on;

        location ~ ^/plesk-stat(.*) {
            alias /var/www/vhosts/system/<website_1>/statistics/$1;
        }

        location ~ ^/awstats-icon(.*) {
            alias /usr/share/awstats/icon/$1;
        }

        location ~ ^/(.*) {
            alias /var/www/vhosts/system/<website_1>/statistics/$1;
        }
    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/<website_1>/conf/vhost_nginx.conf";
}
server {
    listen <vps_ip>:80;

    server_name www.<website_1>;

    location / {
        return 301 https://<website_1>$request_uri;
    }

}

server {
    listen <vps_ip>:80 default_server;

    server_name <website_1>;
    server_name ipv4.<website_1>;

    error_page 400 "/error_docs/bad_request.html";
    error_page 401 "/error_docs/unauthorized.html";
    error_page 403 "/error_docs/forbidden.html";
    error_page 404 "/error_docs/not_found.html";
    error_page 500 "/error_docs/internal_server_error.html";
    error_page 405 "/error_docs/method_not_allowed.html";
    error_page 406 "/error_docs/not_acceptable.html";
    error_page 407 "/error_docs/proxy_authentication_required.html";
    error_page 412 "/error_docs/precondition_failed.html";
    error_page 414 "/error_docs/request_uri_too_long.html";
    error_page 415 "/error_docs/unsupported_media_type.html";
    error_page 501 "/error_docs/not_implemented.html";
    error_page 502 "/error_docs/bad_gateway.html";
    error_page 503 "/error_docs/maintenance.html";

    location ^~ /error_docs {
        root "/var/www/vhosts/<website_1>";
    }

    client_max_body_size 128m;

    location / {
        return 301 https://$host$request_uri;
    }
}
# configuration file /var/www/vhosts/system/<website_1>/conf/vhost_nginx.conf:
location / {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://0.0.0.0:8080;
}
# configuration file /etc/nginx/plesk.conf.d/webmails/<website_2>_webmail.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

server {
    listen <vps_ip>:443 ssl;
    server_name "webmail.<website_2>";

    ssl_certificate             /opt/psa/var/certificates/scfETmI6V;
    ssl_certificate_key         /opt/psa/var/certificates/scfETmI6V;

    client_max_body_size 128m;

    #extension sslit begin

    #extension sslit end

    location / {
        proxy_pass https://<vps_ip>:7081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen <vps_ip>:80;
    server_name "webmail.<website_2>";

    client_max_body_size 128m;

    #extension sslit begin

    #extension sslit end

    location / {
        proxy_pass http://<vps_ip>:7080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# configuration file /etc/nginx/plesk.conf.d/webmails/<website_1>_webmail.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

# Webmail is not enabled on the domain

# Webmail is not enabled on the domain
# configuration file /etc/nginx/plesk.conf.d/vhosts/<website_2>.conf:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
server {
    listen <vps_ip>:443 ssl;

    ssl_certificate             /opt/psa/var/certificates/scfETmI6V;
    ssl_certificate_key         /opt/psa/var/certificates/scfETmI6V;

    server_name www.<website_2>;

    location / {
        return 301 https://<website_2>$request_uri;
    }

}

server {
    listen <vps_ip>:443 ssl http2;

    server_name <website_2>;
    server_name ipv4.<website_2>;

    ssl_certificate             /opt/psa/var/certificates/scfETmI6V;
    ssl_certificate_key         /opt/psa/var/certificates/scfETmI6V;

    error_page 400 "/error_docs/bad_request.html";
    error_page 401 "/error_docs/unauthorized.html";
    error_page 403 "/error_docs/forbidden.html";
    error_page 404 "/error_docs/not_found.html";
    error_page 500 "/error_docs/internal_server_error.html";
    error_page 405 "/error_docs/method_not_allowed.html";
    error_page 406 "/error_docs/not_acceptable.html";
    error_page 407 "/error_docs/proxy_authentication_required.html";
    error_page 412 "/error_docs/precondition_failed.html";
    error_page 414 "/error_docs/request_uri_too_long.html";
    error_page 415 "/error_docs/unsupported_media_type.html";
    error_page 501 "/error_docs/not_implemented.html";
    error_page 502 "/error_docs/bad_gateway.html";
    error_page 503 "/error_docs/maintenance.html";

    location ^~ /error_docs {
        root "/var/www/vhosts/<website_2>";
    }

    client_max_body_size 128m;

    root "/var/www/vhosts/<website_2>/httpdocs";
    access_log "/var/www/vhosts/system/<website_2>/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/<website_2>/logs/proxy_error_log";

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    #extension sslit begin

    #extension sslit end

    location ~ /\.ht {
        deny all;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        auth_basic "Domain statistics";
        auth_basic_user_file "/var/www/vhosts/system/<website_2>/pd/d..httpdocs@plesk-stat";
        autoindex on;

        location ~ ^/plesk-stat(.*) {
            alias /var/www/vhosts/system/<website_2>/statistics/$1;
        }

        location ~ ^/awstats-icon(.*) {
            alias /usr/share/awstats/icon/$1;
        }

        location ~ ^/(.*) {
            alias /var/www/vhosts/system/<website_2>/statistics/$1;
        }
    }

    location ~ ^/~(.+?)(/.*?\.php)(/.*)?$ {
        alias /var/www/vhosts/<website_2>/web_users/$1/$2;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:///var/www/vhosts/system/<website_2>/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;

    }

    location ~ \.php(/.*)?$ {
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:///var/www/vhosts/system/<website_2>/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;

    }

    location ~ /$ {
        index "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml";
    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/<website_2>/conf/vhost_nginx.conf";
}
server {
    listen <vps_ip>:80;

    server_name www.<website_2>;

    location / {
        return 301 http://<website_2>$request_uri;
    }

}

server {
    listen <vps_ip>:80;

    server_name <website_2>;
    server_name ipv4.<website_2>;

    error_page 400 "/error_docs/bad_request.html";
    error_page 401 "/error_docs/unauthorized.html";
    error_page 403 "/error_docs/forbidden.html";
    error_page 404 "/error_docs/not_found.html";
    error_page 500 "/error_docs/internal_server_error.html";
    error_page 405 "/error_docs/method_not_allowed.html";
    error_page 406 "/error_docs/not_acceptable.html";
    error_page 407 "/error_docs/proxy_authentication_required.html";
    error_page 412 "/error_docs/precondition_failed.html";
    error_page 414 "/error_docs/request_uri_too_long.html";
    error_page 415 "/error_docs/unsupported_media_type.html";
    error_page 501 "/error_docs/not_implemented.html";
    error_page 502 "/error_docs/bad_gateway.html";
    error_page 503 "/error_docs/maintenance.html";

    location ^~ /error_docs {
        root "/var/www/vhosts/<website_2>";
    }

    client_max_body_size 128m;

    root "/var/www/vhosts/<website_2>/httpdocs";
    access_log "/var/www/vhosts/system/<website_2>/logs/proxy_access_log";
    error_log "/var/www/vhosts/system/<website_2>/logs/proxy_error_log";

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    #extension sslit begin

    #extension sslit end

    location ~ /\.ht {
        deny all;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        return 301 https://$host$request_uri;
    }

    location ~ ^/~(.+?)(/.*?\.php)(/.*)?$ {
        alias /var/www/vhosts/<website_2>/web_users/$1/$2;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:///var/www/vhosts/system/<website_2>/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;

    }

    location ~ \.php(/.*)?$ {
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:///var/www/vhosts/system/<website_2>/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;

    }

    location ~ /$ {
        index "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml";
    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/<website_2>/conf/vhost_nginx.conf";
}
# configuration file /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

# https://httpoxy.org/
fastcgi_param  HTTP_PROXY         "";

# configuration file /var/www/vhosts/system/<website_2>/conf/vhost_nginx.conf:
location / { return 200 "OK \n"; }
root@localhost:~# 

curl -v ‹website_2.de›

curl -v https://<website_2.de>
*   Trying <plesk IP>:443...
curl -v <website_2.de>

* TCP_NODELAY set
* Connected to <website_2.de> (<plesk IP>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=<website_2.de>
*  start date: Feb 22 18:06:21 2021 GMT
*  expire date: May 23 18:06:21 2021 GMT
*  subjectAltName: host "<website_2.de>" matched cert's "<website_2.de>"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x565382a48e10)
> GET / HTTP/2
> Host: <website_2.de>
> user-agent: curl/7.68.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 403 
< server: nginx
< date: Fri, 26 Feb 2021 08:37:59 GMT
< content-type: text/html
< content-length: 795
< etag: "6033f929-31b"
< 
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>403 Forbidden</title>
  <link rel="stylesheet" href="/error_docs/styles.css">
</head>
<body>
<div class="page">
  <div class="main">
    <h1>Server Error</h1>
    <div class="error-code">403</div>
    <h2>Forbidden</h2>
    <p class="lead">You do not have permission to access this document.</p>
    <hr/>
    <p>That's what you can do</p>
    <div class="help-actions">
      <a href="javascript:location.reload();">Reload Page</a>
      <a href="javascript:history.back();">Back to Previous Page</a>
      <a href="/">Home Page</a>
    </div>
  </div>
</div>
</body>
* Connection #0 to host <website_2.de> left intact


person brane    schedule 23.02.2021    source источник
comment
У вас тоже есть root-доступ к серверу? похоже, что NGINX не попал в это место. Попробуйте location / { return 200 "OK \n"; } для конфигурации вашего второго сервера. Используйте curl, например, для проверки конфигурации curl -v https://mywebsite_2.com/, это должно вернуть 200 OK, если конфигурация правильная.   -  person Timo Stark    schedule 23.02.2021
comment
Привет @TimoStark. Да, у меня есть root-доступ. Это VPS, который я использую. Когда я добавляю местоположение / { return 200 OK \n; } Я получаю ту же ошибку. Но я заметил, что когда я создаю файл index.html с некоторым фиктивным содержимым, я снова получаю OK. У меня нет файла Index.html на сайте_1. Контент динамически создается флягой.   -  person brane    schedule 24.02.2021
comment
Это супер странно. оператор return находится на самых ранних этапах обработки запроса NGINX. Должен быть необходим файл index.html. Можно ли поделиться выводом sudo nginx -T, чтобы распечатать всю конфигурацию. Я думаю, что это будет лучший вариант, чтобы найти проблему.   -  person Timo Stark    schedule 24.02.2021
comment
@TinoStark Я добавил в сообщение вывод nginx -T   -  person brane    schedule 25.02.2021
comment
Как получить эту ошибку? Вы можете поделиться командой curl? Конфигурация выше выглядит как обычная модифицированная конфигурация nginx, модифицированная plesk. Имейте сервер на моей стороне для тестирования. проведу еще несколько тестов, если узнаю, какой запрос вы отправляете.   -  person Timo Stark    schedule 25.02.2021
comment
Привет @TinoStark. Я добавил команду curl с выводом ниже журнала. Что интересно, если я просто «коснусь index.html» в /var/www/vhosts/‹website_2›.de/httpdocs, я снова получаю OK. Я подумал, отлично, это будет обходной путь. Я могу создать пустой файл. Но если я попытаюсь установить прокси после этого, я получаю другую ошибку. ‹p›Запрошенный URL-адрес не найден на сервере. Если вы ввели URL-адрес вручную, проверьте правильность написания и повторите попытку.‹/p›   -  person brane    schedule 26.02.2021
comment
@TinoStark Я нашел решение в конце простой попытки и неудачи. Я добавлю конфигурацию, которая сработала для меня, в комментарии ниже.   -  person brane    schedule 27.02.2021


Ответы (1)


Я нашел конфигурацию, которая работает для меня.

Сначала я поставил галочку в настройках nginx Режим прокси Я установил прокси не в Nginx, а в Дополнительные директивы Apache -> Дополнительные директивы для HTTP/HTTPS

<Proxy *>
    Order deny, allow
    Allow from all
</Proxy>
ProxyPreserveHost On
<Location "/">
    ProxyPass "http://127.0.0.1:9080/"
    ProxyPassReverse "http://127.0.0.1:9080/"
</Location>

Это сработало. Я могу получить доступ к обоим веб-сайтам фляг через доменное имя.

person brane    schedule 27.02.2021
comment
Это httpd мой друг. Не NGINX :) Может быть и так! - person Timo Stark; 28.02.2021
comment
Да. Теперь Nginx настроен как прокси. Но это работает. Есть ли какие-либо преимущества при использовании только nginx, а не apache и nginx в качестве прокси? - person brane; 28.02.2021
comment
Я имею в виду, что вы также используете прокси-сервер... Это означает, что вы передаете запрос от NGINX к Apache, а затем от Apache к вашему приложению... Это не имеет никакого смысла. Проверьте настройки приложения Plesk... Я бы попробовал удалить один прокси-уровень. - person Timo Stark; 01.03.2021
comment
Мне было интересно, зачем мне нужны оба, но, похоже, это обычная настройка, когда NGINX стоит перед Apache. stackoverflow.com/questions/32562099/. Это настройка по умолчанию в Plesk. И я пробовал удалить один слой, но если вы помните название моего вопроса (не работает :) ) - person brane; 02.03.2021
comment
Я запускаю сотни сайтов без единого httpd в цепочке. Основная причина этого, мне не нужно писать файлы .htacecss, потому что я могу просто изменить свою конфигурацию nginx. Но у пары третьих сторон есть файлы .htaccess, встроенные в их коды ... Но, исходя из моей профессии, я могу вам сказать: если ваше приложение нуждается !!! файл .htaccess для работы у вас есть проблема в коде вашего приложения. - person Timo Stark; 04.03.2021