Невозможно запустить nginx после установки в качестве обратного прокси-сервера

1259
Vishnu Rajendran

Я пытаюсь настроить свой nginx в качестве обратного прокси-сервера.

У меня установлены jenkins и nginx на одном сервере. Я пытаюсь получить доступ к jenkins через порт 82 вместо порта 8080.

Ибо то, что я сделал до сих пор,

  1. Перейдите в /etc/nginx/conf.d и создайте новый файл, например: 'forward_jenkins.conf'
  2. Содержание файла forward_jenkins.conf. (Это случайный фрагмент, который я нашел в интернете.)

    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. Сохраните файл и запустите nginx.

Ниже приведена ошибка, которую я получаю

[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. 

Я тоже попробовал приведенную ниже команду.

[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 

Я ничего не изменил в моем файле nginx.conf

[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 { # } # }  } 

Пожалуйста, помогите мне решить эту проблему.

вывод команды состояния

[root @ localhost conf.d] # systemctl status nginx ● nginx.service - HTTP-сервер и обратный прокси-сервер nginx Загружен: загружен (/usr/lib/systemd/system/nginx.service; отключен; предустановка поставщика: отключена) Active: не удалось (Результат: код выхода) с понедельника 2017-12-11 20:41:37 IST; 6s ago Процесс: 2446 ExecStartPre = / usr / sbin / nginx -t (код = выход, состояние = 1 / ОТКАЗ) Процесс: 2445 ExecStartPre = / usr / bin / rm -f /run/nginx.pid (код = выход, состояние = 0 / УСПЕХ)

11 декабря 20:41:36 localhost.localdomain systemd [1]: Запуск HTTP и обратного прокси-сервера nginx ... 11 декабря 20:41:37 localhost.localdomain nginx [2446]: nginx: файл конфигурации / etc / nginx Синтаксис /nginx.conf в порядке 11 декабря 20:41:37 localhost.localdomain nginx [2446]: nginx: [emerg] bind () до 0.0.0.0:82 не удалось (13: разрешение отклонено) 11 декабря 20:41:37 localhost.localdomain nginx [2446]: nginx: файл конфигурации /etc/nginx/nginx.conf тест не пройден 11 декабря 20:41:37 localhost.localdomain systemd [1]: nginx.service: процесс управления завершен, код = состояние выхода = 1 дек. 11 20:41:37 localhost.localdomain systemd [1]: Не удалось запустить HTTP и обратный прокси-сервер nginx. 11 декабря 20:41:37 localhost.localdomain systemd [1]: модуль nginx.service перешел в состояние сбоя. 11 декабря 20:41:37 localhost.localdomain systemd [1]: сбой nginx.service.

0
Что генерирует `nginx -t`? (Неправильно указывать дополнительный файл conf в командной строке). Richard Smith 6 лет назад 0
я предполагаю, что это дает подсказку об ошибке Vishnu Rajendran 6 лет назад 0
Ну, `директива 'server' здесь недопустима` - это не ошибка, но следствие неправильного указания` -c / etc / nginx / conf.d / forward_jenkins.conf` в командной строке. Я не знаю, сообщит ли `nginx -t` об ошибке, если это не так, вы устранили одну из возможных причин. Richard Smith 6 лет назад 0
хорошо, игнорируйте этот шаг. Это был просто шаг устранения неполадок. -> nginx -t -c /etc/nginx/conf.d/forward_jenkins.conf Приведенная ниже ошибка возникла еще до того, как я предпринял какие-либо шаги по устранению неполадок. [root @ localhost conf.d] # systemctl start nginx Задание для nginx.service не выполнено из-за выхода из процесса управления с кодом ошибки. Смотрите "systemctl status nginx.service" и "journalctl -xe" для подробностей. Есть идеи, чтобы решить эту проблему? Vishnu Rajendran 6 лет назад 0
Отредактируйте ваш вопрос и добавьте вывод из `nginx -t`, а также, возможно,` systemctl status nginx.service` и `journalctl -xe`. Richard Smith 6 лет назад 0

3 ответа на вопрос

0
Bert

Несколько вещей для проверки: ваш брандмауэр пропускает вас через порты 82 и 8080? Доступен ли Jenkins без вашей конфигурации NginX с 8080-го порта?

Я хотел бы удалить текущую установку NginX и установить ее из официального репозитория NginX. Я полагаю, вы установили его с epel-release, верно? Мне это не очень нравится, потому что такие вещи иногда случались со мной. Таким образом, вы получите другой файл nginx.conf, который будет более простым, без каких-либо директив сервера, а следовательно, менее запутанным.

Я почти уверен, что ваш конфиг хорош, просто ваш nginx.conf разрушает его. Удаление nginx и переустановка его из официального репозитория nginxs может решить вашу проблему. Но вот мой nginx.conf с некоторыми изменениями в соответствии с вашими настройками:

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; } 

Вы можете попробовать скопировать и вставить это в свой файл nginx.conf (всегда создавайте резервную копию файлов).

я мог видеть ошибку отказа в разрешении для порта 82. 11 декабря 20:41:37 localhost.localdomain nginx [2446]: nginx: [emerg] bind () до 0.0.0.0:82 не удалось (13: разрешение отклонено) Позвольте мне Google на этом. Vishnu Rajendran 6 лет назад 0
0
Vishnu Rajendran

Похоже, его проблема с режимом SELinux.

Попробовал ниже и все заработало.

1. Проверьте текущий режим SELinux, запустив getenforce. Если написано Enforcing, временно установите режим Permissive, запустив setenforce 0, и посмотрите, будет ли ваше приложение работать позже.

0
Vishnu Rajendran

Сейчас я пытаюсь работать с SELinux ON

Я попробовал следующие шаги из интернета.

ням установить policycoreutils-python

порт semanage -a -t http_port_t -p tcp 82

порт semanage -l | grep ^ http_port_t

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

Я мог видеть, что порт 82 успешно добавлен.

Но когда я пытаюсь получить доступ к своему серверу jenkins, используя http://192.168.5.129:82/ с моего хост-компьютера, я получаю ниже ошибку в браузере.

502 Неверный шлюз

Замечания:

Я могу запустить Дженкинс с http://192.168.5.129:8080/

также я могу получить доступ к веб-серверу nginx по адресу http://192.168.5.129:80

и когда я возвращаю мой набор моего SELinux Permissive, я могу получить доступ к jenkins в порту 82.

Но я пытаюсь работать с SELinux ON.

решается вводом команды ниже. setsebool -P httpd_can_network_connect 1 Vishnu Rajendran 6 лет назад 0