Nginx прослушивает порт, отвечает только если установлен порт 80

10

ОС: Funtoo. Я связал NGINX с портом 81 (я хочу запустить его вместе с моим сервером Apache на короткое время для простоты перехода), и он прослушивает порт (если я указываю на другой порт, используя wget, я получаю «Отказано в соединении», но, используя порт 81, я "подключаюсь"), но он никогда не служит ответом HTML любого вида!

При запуске wget в порту с локального хоста я получаю:

# wget localhost:81
-2014-04-16 23:56:45- http://localhost:81/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:81... connected.
HTTP request sent, awaiting response...

На другом компьютере ...

$ wget 192.168.18.42:81
-2014-04-16 23:57:19- http://192.168.18.42:81/
Connecting to 192.168.18.42:81... connected.
HTTP request sent, awaiting response...

Ничего не происходит после этого. Документы существуют, это обычный Funtoo nginx.conf.

ОБНОВЛЕНИЕ: я могу заставить это слушать порт 80, но это все еще удивляет меня, что я не могу заставить это работать на любом порту ....

netstat -aWn | grep 81 | grep LISTEN
tcp 60 0 0.0.0.0:81 0.0.0.0:* LISTEN

Редактировать: Файлы конфигурации:

user nginx nginx;
worker_rlimit_nofile 6400;

error_log /var/log/nginx/error_log info;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include /etc/nginx/mime.types;

    # This causes files with an unknown MIME type to trigger a download action in the browser:
    default_type application/octet-stream;

    log_format main
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';

    client_max_body_size 64m;

    # Don't follow symlink if the symlink's owner is not the target owner.

    disable_symlinks if_not_owner;
    server_tokens off;
    ignore_invalid_headers on;

    gzip off;
    gzip_vary on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/x-icon image/bmp;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    index index.html;
    include /etc/nginx/sites-enabled/*;
}

Блок сервера:

server {
    listen  *:81;
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}
Aviator45003
источник
У вас включен фильтр пакетов ( iptables)? Если да, то не забыли ли вы разрешить порт 81?
Андреас Визе
iptables не включен.
Aviator45003
2
Тогда соответствующие части вашей конфигурации будут полезны, я думаю.
Андреас Визе

Ответы:

5

Попробуйте следующий блок сервера:

server {
   listen       81 default_server;
    server_name _;    
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}

Подчеркивание _- это подстановочный знак. Кроме того, *:81скорее всего, это не то, что вы ожидаете, просто используйте номер порта.

Затем проверьте свои настройки с помощью nginx -t:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите nginx:

service nginx restart

Тест с помощью netstat:

root@gitlab:~# netstat -napl | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7903/nginx      
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      2662/unicorn.

Обновить

Я установил nginx в тестовой системе. С помощью стокового nginx.confфайла и изменением на 1 строку /etc/nginx/sites-enabled/defaultя смог получить файлы с порта 81

cat /etc/nginx/sites-enabled/default
server {

    listen   81;
    server_name localhost;
    root /usr/share/nginx/www;
    index index.html index.htm;


    location / {
        try_files $uri $uri/ /index.html;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        deny all;
    }

}

Выход Netstat:

netstat -napl | grep 81
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      3432/nginx

Загрузить файл:

$ wget localhost:81

Содержание файла:

$ cat index.html
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

Update2

Тестовый порт:

 root@gitlab:# nc -vz localhost 81
 Connection to localhost 81 port [tcp/*] succeeded!
 root@gitlab:# nc -vz localhost 443
 nc: connect to localhost port 443 (tcp) failed: Connection refused
spuder
источник
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 9 0 0.0.0.0:81 0.0.0.0:* LISTEN 1026/nginx: master По-прежнему безуспешно. Является ли Recv-Q 9 намеком? Это происходит каждый раз, когда я пытаюсь сделать wget или что-то в этом роде. Блок сервера точно такой, как вы прописали.
Aviator45003
Я не уверен, что такое Recv-Q. У вас есть что-нибудь в / etc / nginx / sites-available?
spuder
1
@TC Пожалуйста, смотрите мой обновленный ответ.
spuder
без изменений в моем статусе, даже после нового файла конфигурации. Возможно ли, что что-то блокирует порты, а не порт 80? Есть ли способ, которым я могу проверить это?
Aviator45003
1
TC да, используйте nc, смотрите обновление
spuder
4

Оказывается, большая проблема? Nginx установил значение worker_processes в 0. Я добавил строку, устанавливающую его autoв начало моего nginx.conf, и все было хорошо с миром!

Спасибо всем за ваше время и терпение.

Aviator45003
источник
Вы только что избавили меня от сдачи примерно через 1 час разочарования - очевидно, одна из моих автоматических переменных использовалась для шаблонного вывода конфигурации Nginx a 0for worker_processes, и я был совершенно ошеломлен после четырехкратной проверки каждого другого файла конфигурации, DNS, хостов и т. Д.
geerlingguy