Puncte:0

Împiedicați nginx să rescrie un port în antetul locației

drapel hu

așa că rulez o aplicație Laravel într-un container nginx, căruia îi dau acces printr-un alt nginx care acționează ca un proxy invers. Containerul expune un port 8123/tcp pentru accesarea serviciului. Problema este că, dintr-un anumit motiv, nginx adaugă un port la adresă la un moment dat, așa că să presupunem că accesez https://app.example.com, apoi containerul redirecționează către http://app.example.com/docs și apoi redirecționează către http://app.example.com:8123/docs/. Iată configurația pe care o folosesc pentru proxy-ul invers:

Server {
        asculta 443 ssl http2;
        asculta [::]:443 ssl http2;
        nume_server app.example.com;
        access_log /var/log/nginx/app.example.com-access.log;
        error_log /var/log/nginx/app.example.com-errors.log;
        add_header Referrer-Policy same-origin;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Frame-Options „SAMEORIGIN”;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

        Locație / {
                proxy_redirect dezactivat;
                port_in_redirect dezactivat;
                proxy_pass http://127.0.0.1:8123;
                proxy_http_versiunea 1.1;
                proxy_set_header Gazdă $http_host;
                proxy_set_header Locație $http_host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Host $http_host;
                proxy_set_header X-Real-IP $adresă_la distanță;
        }
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_dhparam /etc/letsencrypt/dhparams_4096.pem;
}
Server {
        asculta 80;
        asculta [::]:80;
        nume_server app.example.com;
        returnează 302 https://app.example.com$request_uri;
}

Acesta este pentru containerul cu nginx în interior:

lucrător_procese 1;
error_log stderr debug;
pid /run/nginx.pid;

utilizator www-data; #user trebuie să fie același cu cel care rulează php

evenimente {
    conexiuni_muncitor 1024;
}

http {
    include mime.tipuri;
    aplicație de tip_default/octet-stream;
    sendfile activat;
    tcp_nopush activat;
    tcp_nodelay activat;
    fastcgi_keep_conn on;
    fastcgi_buffering activat;
    fastcgi_buffer_size 512k;
    fastcgi_buffers 128 256k;

    # Ajustați nginx keepalives pentru a funcționa cu GCP HTTP(S) Load Balancer:
    keepalive_timeout 65;

    # Definiți formatul de jurnal personalizat pentru a include timpii de răspuns
    log_format main_timed '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" '
                          '$request_time $upstream_response_time $pipe $upstream_cache_status';

    access_log /dev/stdout main_timed;
    error_log /dev/stderr debug;

    # Scrieți fișiere temporare în /tmp, astfel încât acestea să poată fi create ca utilizator neprivilegiat
    client_body_temp_path /tmp/client_temp;
    proxy_temp_path /tmp/proxy_temp_path;
    calea_temp_fastcgi /tmp/fastcgi_temp;
    uwsgi_temp_path /tmp/uwsgi_temp;
    scgi_temp_path /tmp/scgi_temp;



    # Definiția implicită a serverului
    Server {
        asculta 8123;
        numele serverului _;
        access_log /dev/stdout main_timed;
        error_log /dev/stderr debug;
        index index.php index.html;

        add_header X-Frame-Options „SAMEORIGIN”;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";

        # Definit în Cloud run
        client_max_body_size 300M;

        root /var/www/app/public;

        locație / { try_files $uri $uri/ try_files $uri $uri/ /index.php$is_args$args; }

        locație ~ .php$ {
                includ /etc/nginx/fastcgi_params;
                fastcgi_pass unix:/tmp/php-fpm.sock;

                fastcgi_index index.php;
                fastcgi_read_timeout 300;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        locație ~ /\. {
                nega totul;
        }

        locație = /favicon.ico {
            access_log off;
            log_not_found off;
        }
        locație ~* \.(woff|woff2|svg|jpg|jpeg|png|gif|ico)$ {
            expiră 1d;
        }
        locație ~* \.(js|css)$ {
            expiră 20m;
        }
        locație ^~ /storage/app/docs {
                    nega totul;
        }
        # Permiteți ping fpm și starea de la localhost
        # locație ~ ^/(fpm-status|fpm-ping)$ {
        # access_log off;
        # permite 127.0.0.1;
        # nega totul;
        # #permite toate;
        # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # include fastcgi_params;
        # fastcgi_pass unix:/tmp/php-fpm.sock;
        # }
    }

    gzip on;
    gzip_proxied orice;
    gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;
    gzip_vary on;
    gzip_disable „msie6”;

    # Includeți alte configurații de server
    includ /etc/nginx/conf.d/*.conf;

EDITARE 1: Nu am observat că includ și alte fișiere de configurare, așa că iată-le:

fastcgi_params


fastcgi_param QUERY_STRING $șir_interogare;
fastcgi_param REQUEST_METHOD $cerere_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 $schemă;
fastcgi_param HTTPS $https dacă_nu_vide;

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

fastcgi_param REMOTE_ADDR $adresă_la distanță;
fastcgi_param REMOTE_PORT $port_la distanță;
fastcgi_param SERVER_ADDR $adresa_server;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# Numai PHP, necesar dacă PHP a fost construit cu --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

/etc/nginx/conf.d folderul este gol.

Ce fac gresit?

drapel in
A doua redirecționare nu are loc în nginx, ci în aplicația dvs. Configurați aplicația dvs. cu adresa URL de bază corectă (fără port).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.