Настройте Nginx + Passenger с помощью приложения Rails и приложения Vue.js - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть удаленный сервер Nginx с Passenger, который обслуживает мой Rails API через общедоступный IP-адрес 12.34.56.78.

Теперь я развернул приложение Vue.js на том же хосте и могу получить доступ кприложение из браузера, введя IP-адрес 12.34.56.78, но когда я пытаюсь войти, я получаю сообщение об ошибке CONNECTION REFUSED

Это мое nginx.conf

приложение Rails

server {
    listen       3000;
    server_name  bikeramp.local;

    root /home/deploy/bikeramp/current/public;
    passenger_enabled on;
    rails_env production;
    access_log /var/log/nginx/bikeramp.access.log;
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

Приложение Vue.js

server {
        listen   80 default_server;
        server_name  bikeramp_front.local;

        location / {
            root   /home/jdomanski/bikeramp-front;
            try_files $uri $uri/ /index.html;
        }
    }

Я подтвердил, что оба моих приложения обслуживаются Nginx:

netstat -tln

tcp        0      0 127.0.0.1:41382         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN    

Я могу получить доступ к своему приложению Vue.jsс IP-адреса 12.34.56.78/signin, но когда я делаю HTTP-запрос из внешнего интерфейса в форме, я получаю сообщение об ошибке

OPTIONS http://localhost:3000/api/users/login net::ERR_CONNECTION_REFUSED

Это код, где я делаю HTTP-запрос к API

axios.defaults.baseURL = 'http://localhost:3000'

Когда я делаю запрос от внешнего интерфейса на своем локальном компьютере, указывая на удаленный IP-адрес, я получаю ошибку:

XMLHttpRequest cannot load http://54.38.36.242/api/users/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 405.

Как настроить Nginx для отправки запросов от моего внешнего приложения к внутреннему приложению, которое находится на том же хосте, который обслуживаеттот же сервер Nginx.Возможно, мне что-то не хватает в моем файле nginx.conf.Вы можете мне помочь?Должен ли я включить CORS в Nginx?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы обслуживаете интерфейс из другого домена, поэтому да, вам нужен CORS с разрешающим Access-Control-Allow-Origin (либо *, либо доменами, которые вы используете в dev).

Редактировать: вы можетеиспользуйте для этого NGINX или Rails (например https://github.com/cyu/rack-cors)

...