NGINX non si avvia

Ciao a tutti!

Sto cercando di installare Discourse su un sottodominio.
Il mio dominio principale utilizza WordPress, che è stato creato utilizzando docker-compose.
Il sottodominio e il dominio utilizzano lo stesso server VPS.

Per l’installazione ho seguito questa guida: https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

Purtroppo, NGIX non si avvia. Quando eseguo il comando systemctl status nginx, appare il seguente messaggio:

× nginx.service - Un server web ad alte prestazioni e un server proxy inverso
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Ven 08/03/2024 07:06:36 CST; 1h 14min fa
       Docs: man:nginx(8)
    Process: 27329 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 27330 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
        CPU: 42ms

08/03/2024 07:06:33 vmi1695712.contaboserver.net systemd[1]: Starting Un server web ad alte prestazioni e un server proxy inverso...
08/03/2024 07:06:33 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
08/03/2024 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
08/03/2024 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
08/03/2024 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
08/03/2024 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
08/03/2024 07:06:36 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] still could not bind()
08/03/2024 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
08/03/2024 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: Failed with result 'exit-code'.
08/03/2024 07:06:36 vmi1695712.contaboserver.net systemd[1]: Failed to start Un server web ad alte prestazioni e un server proxy inverso.

Il mio file di configurazione per Discourse:

# Default server configuration
#
server {
        # listen 80 default_server;
        # listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name forum.ictsharks.com;

        location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\..ht {
        #       deny all;
        #}
}

L’ho controllato più volte, ma non riesco a capire dov’è l’errore.
Mi dispiace, sono un principiante con Linux / NGINX / Docker. Qualsiasi consiglio sarebbe apprezzato. Grazie.

1 Mi Piace

C’è un altro webserver su quella macchina che sta occupando la porta 80?

1 Mi Piace

Hai modificato le porte in app.yml in modo che Discourse non tenti di utilizzare le porte desiderate da NGINX?

Questa è una configurazione avanzata che richiede la comprensione di DNS, https e certificati, nginx, proxy inversi, docker e routing.

1 Mi Piace

Come ho detto, wordpress è in esecuzione sul dominio principale.

Se ho capito bene, l’altro NGIX funziona nel container insieme a wordpress.

Ho seguito questo tutorial: How To Install WordPress With Docker Compose | DigitalOcean

Se eseguo il comando netstat -tulnp, questo è ciò che ottengo:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      419/systemd-resolve
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1192/docker-proxy
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      463/sshd: /usr/sbin
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1179/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      463/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           419/systemd-resolve

Istruzioni suggeriscono di commentarli, quindi ho fatto:

## quali porte TCP/IP dovrebbe esporre questo container?
## Se si desidera che Discourse condivida una porta con un altro webserver come Apache o nginx,
## vedere https://meta.discourse.org/t/17247 per i dettagli
esponi:
  # - "80:80"   # http
  # - "443:443" # https

Capisco i record DNS, https e i certificati. Solo il resto è nuovo per me.

Non preoccuparti, so come usare Google e imparo in fretta :wink:

1 Mi Piace

Prima di iniziare, era dietro un proxy inverso NGINX funzionante a cui stai aggiungendo Discourse?

O se Apache/WordPress era in esecuzione prima, è quello che ha la porta 80?

Oh, sembra che docker-proxy abbia la porta 80, quindi forse avevi il tuo WordPress dietro docker-proxy?

Forse docker ps per vedere se riesci a vedere cosa docker

1 Mi Piace

Come ho dichiarato, credo che l’altro NGIX (quello per wordpress) funzioni in un container insieme a MySQL e Wordpress.

Questo è ciò che ottengo eseguendo il comando docker ps:

CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                      NAMES
6ca4cbec2c88   local_discourse/app          " /sbin/boot"          51 minutes ago   Up 15 minutes                                              app
4a3ebdd9f5b5   nginx:1.15.12-alpine         "nginx -g 'daemon of..."   20 hours ago     Up 15 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   webserver
42c4211a2fb6   wordpress:5.1.1-fpm-alpine   "docker-entrypoint.s..."   2 days ago       Up 15 minutes   9000/tcp                                   wordpress
5b588a7435ad   mysql:8.0                    "docker-entrypoint.s..."   2 days ago       Up 15 minutes   3306/tcp, 33060/tcp                        db

Ecco perché l’nginx esterno non può avviarsi, poiché le porte sono occupate da quello interno. Probabilmente è necessario arrestare quel container e trasferire la sua configurazione per WordPress allo strato esterno di nginx.

Inoltre, questi sono container separati, nginx è separato da MySQL e WordPress.

1 Mi Piace

Ho arrestato il webserver (container NGIX) e ho provato ad avviare il NGIX esterno. Ancora non funziona.

Hai ragione. È colpa mia. Pensavo che tutte le app menzionate fossero in un unico container.

Un container = un’applicazione/programma :wink:

Cosa mostrano ora docker ps e netstat -tulnp?

CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                 NAMES
6ca4cbec2c88   local_discourse/app          “/sbin/boot”             3 ore fa      Up 2 ore                           app
42c4211a2fb6   wordpress:5.1.1-fpm-alpine   “docker-entrypoint.s…”   2 giorni fa   Up 2 ore     9000/tcp              wordpress
5b588a7435ad   mysql:8.0                    “docker-entrypoint.s…”   2 giorni fa   Up 2 ore     3306/tcp, 33060/tcp   db

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      418/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      462/sshd: /usr/sbin
tcp6       0      0 :::22                   :::*                    LISTEN      462/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           418/systemd-resolve

Non c’è molto altro che posso fare qui, nginx sembra ancora fare la stessa cosa, o l’errore è cambiato in qualche modo?

Questo dovrebbe essere fatto in concomitanza con l’aggiunta del template web.socketed.template.yml, lo hai fatto?

2 Mi Piace

Sì, l’ho fatto.

Ho provato a disinstallare e reinstallare NGIX e ho eliminato il file di configurazione. Tuttavia, il problema persiste.

Proverò a cercare gli errori NGIX elencati e vedrò cosa trovo.

Ho risolto il problema di NGIX! :grinning:

Nella cartella /etc/nginx/sites-enabled/ c’era un file senza senso “ysystemctl status nginx”. L’ho cancellato.

Ora NGIX funziona :muscle:

Seguirò le istruzioni di riking e ti farò sapere come va.

1 Mi Piace

Ok, il mio forum di discourse è attivo e funzionante!

Sfortunatamente, le istruzioni non menzionano come modificare le impostazioni per NGINX, che sta eseguendo il sito web/WordPress.

Dice solo questo: Crea altri “siti” NGINX, quindi collegali e abilitali, come nell’ultimo passaggio sopra.

Apprezzerei molto qualsiasi consiglio su come raggiungere questo obiettivo.

Ho installato WordPress secondo questa guida: Come installare WordPress con Docker Compose

Oltre a ciò, puoi confermare o smentire le mie conclusioni?

  1. NGINX (quello non nel container) viene utilizzato come proxy inverso.
  2. NGINX (quello non nel container) è definito “NGINX esterno”.
  3. NGINX (quello non nel container) utilizza socket Unix invece di porte TCP per la comunicazione nella configurazione attuale.
  4. Discourse è un’applicazione standalone e quindi non necessita di installare il proprio webserver NGINX.

Mi scuso se sto cercando di verificare cose ovvie. Voglio solo essere sicuro al 100%.

Questo è praticamente tutto.

Il container discourse include nginx, rails, postgres e redis.

1 Mi Piace