Nginx kann nach dem Setup als Reverse-Proxy-Server nicht gestartet werden

1437
Vishnu Rajendran

Ich versuche, meinen Nginx als Reverse-Proxy-Server einzurichten.

Ich habe Jenkins und Nginx auf demselben Server installiert. Ich versuche, auf Port 82 anstelle von Port 8080 auf Jenkins zuzugreifen.

Für das, was ich bis jetzt getan habe, ist es

  1. Gehe zu /etc/nginx/conf.d und erstelle eine neue Datei mit zB: 'forward_jenkins.conf'
  2. Inhalte von forward_jenkins.conf. (Dies ist ein zufälliger Ausschnitt, den ich im Internet gefunden habe.)

    server { listen 82; server_name foobar.net;  location / { proxy_pass http://127.0.0.1:8080; 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; } } 
  3. Speichern Sie die Datei und starten Sie Nginx.

Unten ist der Fehler, den ich bekomme

[root@localhost conf.d]# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. 

Ich habe auch den folgenden Befehl ausprobiert.

[root@localhost conf.d]# nginx -t -c /etc/nginx/conf.d/forward_jenkins.conf nginx: [emerg] "server" directive is not allowed here in /etc/nginx/conf.d/forward_jenkins.conf:1 nginx: configuration file /etc/nginx/conf.d/forward_jenkins.conf test failed 

Ich habe nichts in meiner nginx.conf-Datei geändert

[root@localhost nginx]# cat nginx.conf  user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; }  http { 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/mime.types; default_type application/octet-stream;  # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf;  server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html;  # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf;  location / { }  error_page 404 /404.html; location = /40x.html { }  error_page 500 502 503 504 /50x.html; location = /50x.html { } }  # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # }  } 

Bitte helfen Sie mir, dieses Problem zu beheben.

Ausgabe des Statusbefehls

[root @ localhost conf.d] # systemctl status nginx ● nginx.service - Der HTTP- und Reverse-Proxy-Server von nginx Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; Herstellervorgabe: deaktiviert) Aktiv: gescheitert (Ergebnis: exit-code) seit Mo 2017-12-11 20:41:37 IST; Vor 6s Prozess: 2446 ExecStartPre = / usr / sbin / nginx -t (code = beendet, Status = 1 / FAILURE) Prozess: 2445 ExecStartPre = / usr / bin / rm -f /run/nginx.pid (code = beendet, Status = 0 / ERFOLG)

11. Dez 20:41:36 localhost.localdomain systemd [1]: Starten des HTTP-Nginx- und des Reverse-Proxy-Servers ... 11. Dez 20:41:37 localhost.localdomain nginx [2446]: nginx: Konfigurationsdatei / etc / nginx /nginx.conf-Syntax ist in Ordnung 11. Dezember 20:41:37 localhost.localdomain nginx [2446]: nginx: [emerg] bind () an 0.0.0.0:82 ist fehlgeschlagen (13: Berechtigung abgelehnt) 11. Dezember 20:41:37 localhost.localdomain nginx [2446]: nginx: Konfigurationsdatei /etc/nginx/nginx.conf Test fehlgeschlagen 11. Dezember 20:41:37 localhost.localdomain systemd [1]: nginx.service: Steuerungsprozess beendet, Code = beendeter Status = 1 Dez 11 20:41:37 localhost.localdomain systemd [1]: Der nginx-HTTP- und der Reverse-Proxy-Server konnten nicht gestartet werden. 11. Dez 20:41:37 localhost.localdomain systemd [1]: Einheit nginx.service trat in den fehlerhaften Zustand ein. 11. Dez 20:41:37 localhost.localdomain systemd [1]: nginx.service ist fehlgeschlagen.

0
Was erzeugt nginx -t? (Es ist falsch, die zusätzliche conf-Datei in der Befehlszeile anzugeben.) Richard Smith vor 6 Jahren 0
Ich vermute, es gibt einen Hinweis auf den Fehler Vishnu Rajendran vor 6 Jahren 0
Nun, die "Server" -Direktive ist hier nicht zulässig. Dies ist nicht der Fehler, sondern die Folge der falschen Angabe von "-c / etc / nginx / conf.d / forward_jenkins.conf" in der Befehlszeile. Ich weiß nicht, ob "nginx -t" einen Fehler meldet, andernfalls haben Sie eine mögliche Ursache beseitigt. Richard Smith vor 6 Jahren 0
Okay, ignorieren Sie diesen Schritt. Es war nur ein Fehlerbehebungsschritt. -> nginx -t -c /etc/nginx/conf.d/forward_jenkins.conf Der folgende Fehler trat zuerst auf, noch bevor ich einen Troubledhoot-Schritt ausprobierte. [root @ localhost conf.d] # systemctl start nginx Job für nginx.service ist fehlgeschlagen, da der Steuerungsprozess mit Fehlercode beendet wurde. Siehe "systemctl status nginx.service" und "journalctl -xe" für Einzelheiten. Irgendeine Idee, um das zu lösen? Vishnu Rajendran vor 6 Jahren 0
Bearbeiten Sie Ihre Frage und fügen Sie die Ausgabe von `nginx -t` und möglicherweise auch` systemctl status nginx.service` und `journalctl -xe` hinzu. Richard Smith vor 6 Jahren 0

3 Antworten auf die Frage

0
Bert

Ein paar Dinge, die Sie überprüfen sollten: Erlaubt Ihre Firewall den Anschluss von Port 82 und 8080? Ist Jenkins ohne Ihre NginX-Konfiguration vom 8080. Port aus erreichbar?

Ich würde Ihre aktuelle NginX-Installation entfernen und aus dem offiziellen NginX-Repository installieren. Ich nehme an, Sie haben es aus dem Epel-Release installiert, oder? Ich mag das nicht wirklich, weil solche Dinge manchmal auch bei mir vorkamen. Auf diese Weise erhalten Sie eine andere nginx.conf-Datei, die einfacher ist, ohne Serveranweisungen und daher weniger verwirrend ist.

Ich bin mir ziemlich sicher, dass die Konfiguration gut ist. Es ist nur so, dass Ihre nginx.conf es ruiniert. Wenn Sie nginx entfernen und aus dem offiziellen Repository von nginxs erneut installieren, wird Ihr Problem möglicherweise behoben. Aber hier ist meine nginx.conf mit einigen Modifikationen entsprechend Ihrer Konfiguration:

user nginx; worker_processes 1;  error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;  events { worker_connections 1024; }   http { server_tokens off;  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;  keepalive_timeout 65;  gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/plain application/x-javascript text/xml text/css; gzip_vary on;  include /etc/nginx/conf.d/*.conf; #include /etc/nginx/sites-enabled/*.conf; } 

Sie können versuchen, dies in Ihre nginx.conf-Datei zu kopieren und dort einzufügen (stellen Sie sicher, dass Sie immer eine Sicherungskopie der Dateien erstellen).

Ich konnte einen Permision-abgelehnten Fehler für Port 82 sehen. 11. Dez. 20:41:37 localhost.localdomain nginx [2446]: nginx: [emerg] bind () an 0.0.0.0:82 fehlgeschlagen (13: Berechtigung verweigert) Lassen Sie mich google auf diesem. Vishnu Rajendran vor 6 Jahren 0
0
Vishnu Rajendran

Scheint wie sein Problem mit dem SELinux-Modus.

Versuchte das unten und es hat funktioniert.

1.Überprüfen Sie den aktuellen SELinux-Modus, indem Sie getenforce ausführen. Wenn Enforcing angezeigt wird, setzen Sie den Modus vorübergehend auf Permissive, indem Sie setenforce 0 ausführen, und prüfen Sie, ob Ihre Anwendung danach funktioniert.

0
Vishnu Rajendran

Nun versuche ich dies mit SELinux ON zu arbeiten

Ich habe die folgenden Schritte aus dem Internet ausprobiert.

yum install policycoreutils-python

semanage port -a -t http_port_t -p tcp 82

semanage port -l | grep ^ http_port_t

[root @ localhost nginx] # semanage port -l | grep ^ http_port_t http_port_t tcp 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000

Port 82 wurde erfolgreich hinzugefügt.

Wenn ich jedoch über http://192.168.5.129:82/ von meinem Host-Rechner aus auf meinen Jenkins-Server zugreifen möchte, erhalte ich einen Fehler unter dem Browser.

502 Bad Gateway

Hinweis:

Ich kann Jenkins von http://192.168.5.129:8080/ starten.

Ich kann auch über http://192.168.5.129:80 auf den Nginx-Webserver zugreifen

und wenn ich mein SELinux Permissive setze, kann ich auf Jenkins in Port 82 zugreifen.

Aber ich versuche dies mit SELinux ON zu arbeiten.

gelöst durch Eingabe des Befehls unten. setsebool -P httpd_can_network_connect 1 Vishnu Rajendran vor 6 Jahren 0