Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2020, 21:22
Интересующийся
Отправить личное сообщение для illusion Посмотреть профиль Найти все сообщения от illusion
 
Регистрация: 01.02.2020
Сообщений: 22

Не срабатывает маршрут express
Уже второй пример с одним итогом- не работает маршрутизация express.
Удаленный сервер Ubuntu 18.04
Примеры из: https://metanit.com/web/nodejs/6.9.php
и https://metanit.com/web/nodejs/6.5.php
скрипт запускается выдает в консоли
"Сервер ожидает подключения..."
Но при открытии из браузера и по http и по https страничка открывается, но не видит маршрута:
"jquery-2.2.4.min.js:4 GET http://funprograms.ru/api/users 404 (Not Found)".
Прописывал в маршруте console.log("/api/users");
Соответственно этого сообщения не увидел в консоли Linux.
Возможно не видит сам скрипт js.

На сервере путь к файлам /var/www/funprograms.ru/html
Здесь скрипт js, а в
/var/www/funprograms.ru/html/public
статический html

Попробовал перенести файлы на уровень выше в /var/www/funprograms.ru/
Ничего не изменилось
каталог funprograms.ru имеет права root, а рассматриваемые файлы и каталог public права другого пользователя.
При этом права каталога funprograms.ru я не могу сменить на пользовательское из под WinSCP (FTP клиент) запущенного под root.

Может быть что то с правами доступа к файлам, каталогам?

Последний раз редактировалось illusion, 03.02.2020 в 21:34.
Ответить с цитированием
  #2 (permalink)  
Старый 04.02.2020, 13:00
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

ожидает то ожидает в примере сервер запускается на порту 3000, если вы его просто скопипастили, тогда возможно будет работать так http://funprograms.ru:3000/api/users
Ответить с цитированием
  #3 (permalink)  
Старый 04.02.2020, 19:32
Интересующийся
Отправить личное сообщение для illusion Посмотреть профиль Найти все сообщения от illusion
 
Регистрация: 01.02.2020
Сообщений: 22

Да вы правы, но под 5000 портом.
Еще одна особенность:
Это я написал под 5000 портом. ( http://funprograms.ru:5000/api/users Выдает данные)
Если тоже самое сделать на 3000, то не открывается даже страничка html
http://funprograms.ru и https://funprograms.ru
При этом http://funprograms.ru:3000/api/users выдает данные

Дайте совет как применять такие примеры к реальному серверу?
порты 3000 и 5000 и 27017 открыты
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2020, 12:11
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

надо запускать сервер на 80 порту чтобы он открывался по ссылке http://funprograms.ru... надо убедить что другие службы не занимают этот порт, если установлен http-proxy (nginx, apache), тогда надо сделать в них переадресацию с порта экспресс сервера,... если нужен https тогда экпресс тоже должен работать в https режиме...
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2020, 13:19
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

В большинстве UNIX-подобных ОС прослушивание портов с номерами 0—1023 требует особых привилегий (root). Другие номера портов выдаются операционной системой первым запросившим их процессам без root привелегий
Узнать что весит на порту
sudo lsof -i :3000

В продакшене использовать связку Nginx в качестве proxy и https://github.com/Unitech/pm2
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2020, 20:11
Интересующийся
Отправить личное сообщение для illusion Посмотреть профиль Найти все сообщения от illusion
 
Регистрация: 01.02.2020
Сообщений: 22

Большое спасибо за ответы.
Я немного знаком с pm2, пробовал запускать скрипты с помощью его.
У меня имеется nginx на сервере и установлен ssl от Certbot с самообновлением.
В /etc/nginx/sites-available остался старый фал default c текстом стандартным и я создал файл funprograms.ru с таким содержимым:
server {
listen 80;
listen [::]:80;
root /var/www/funprograms.ru/html;
index index.html index.htm index.nginx-debian.html;
server_name funprograms.ru [url]www.funprograms.ru;[/url]
location / {
try_files $uri $uri/ =404;
proxy_pass [url]http://localhost:5000;[/url]
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/funprograms.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/funprograms.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
#return 301 https://funprograms.ru$request_uri;

}

Область ssl записалась автоматом при установке сертификата.
В файле /etc/hosts одна запись:
127.0.0.1 localhost

вот что на 80 порту:

Понял почему у меня на 5000 порту открывалась страничка:
"proxy_pass http://localhost:5000;"
Знаком с командой sudo lsof -i :3000 и использую ее. Бывают ситуации в консоль зависнет и скрипт не закрывается "CTRL+C" и потом убиваю процесс чтобы не висел и не забивал порт.

Получается что я запускаю скрипт под localhost:5000 nginx перебрасывает его на 80 порт и он открывается по доменному имени. Но запросы с странички не добираются до /api/users
app.get("/api/users", function(req, res){
    console.log('Тест error my /api/users');
    User.find({}, function(err, users){
 
        if(err) return console.log(err);

        res.send(users)
    });

});

Срабатывает только по http://funprograms.ru:5000/api/users
а не по http://funprograms.ru/api/users

Не обращайте внимания на proxy_pass это автоматом на форум добавилось так как текст разместил как код JS

Последний раз редактировалось illusion, 05.02.2020 в 20:39.
Ответить с цитированием
  #7 (permalink)  
Старый 05.02.2020, 21:39
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Попробуйте так
Код:
server {

    server_name funprograms.ru;
    root /var/www/api;
    index index.html;
    listen (:):443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/funprograms.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/funprograms.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    add_header Strict-Transport-Security "max-age=31536000" always; # managed by Certbot
    ssl_stapling on; # managed by Certbot
    ssl_stapling_verify on; # managed by Certbot

  location / {
    client_max_body_size 100m;
    client_body_timeout 600s;
    client_body_in_file_only clean;
    client_body_buffer_size 16K;
    proxy_connect_timeout      70;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    proxy_redirect off;
    proxy_set_header host $host;
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:5000;
  }
}
Ответить с цитированием
  #8 (permalink)  
Старый 06.02.2020, 20:31
Интересующийся
Отправить личное сообщение для illusion Посмотреть профиль Найти все сообщения от illusion
 
Регистрация: 01.02.2020
Сообщений: 22

Poznakomlus, Помогло, огромное спасибо !!!
Только маленькая опечатка :
listen (:443 ssl; заменил на:
listen (:):443 ssl;
Отображается на форуме неправильно [ : : ] вместо ( : ), ну да ладно
Теперь мне остается разобраться в этом.
Пару вопросиков:
1) А доступ к сайту через www. как сделать?
в секции server_name funprograms.ru; пробовал добавить www.funprograms.ru не работает так
2) Сейчас стоит "root /var/www/api;" а было /var/www/funprograms.ru/html ( здесь скрипт и лежит). Но это вроде как никак не повлияло на работу

Последний раз редактировалось illusion, 06.02.2020 в 20:50.
Ответить с цитированием
  #9 (permalink)  
Старый 06.02.2020, 21:02
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

1. server_name funprograms.ru www.funprograms.ru;
так должно работать
иначе смотреть, что показывает nginx -t
2. Да это лишнее
Ответить с цитированием
  #10 (permalink)  
Старый 06.02.2020, 21:11
Интересующийся
Отправить личное сообщение для illusion Посмотреть профиль Найти все сообщения от illusion
 
Регистрация: 01.02.2020
Сообщений: 22

Пробовал server_name funprograms.ru www.funprograms.ru;
Но по www.funprograms.ru перенаправляет на заглушку nginx а не https://funprograms.ru
nginx -t выдает все в порядке

Сервер nginx разумеется перезапускал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер срабатывает раньше времени или вообще не срабатывает Terebonko Элементы интерфейса 6 03.08.2017 12:43
express app.sendFile('index.html') не удается получить связанные файлы. Astrey Node.JS 1 06.07.2017 17:25
ошибка при вызове из консоли глобального модуля express в node.js в windows 8.1 jazznet AJAX и COMET 1 16.06.2015 10:30
onclick срабатывает со 2 раза в ie djonA Общие вопросы Javascript 19 25.03.2013 01:07
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13