EC2 AWS 405 (не допускается) и проблемы CORS с NGINX FrontEnd && BackEND - PullRequest
0 голосов
/ 18 июня 2020

У меня есть интерфейсное приложение с reactjs и серверное с express, где я локально отправляю данные внешнего интерфейса, используя localhost:3333 с ax ios, с этим проблем не возникает.

Теперь я пытаюсь использовать экземпляр EC2 AWS для размещения этого приложения, но безуспешно.

Экземпляр ec2 предназначен только для тестов, поэтому он публикует c DNS IPV4: http://ec2-18-228-222-138.sa-east-1.compute.amazonaws.com/ и publi c IPV4: 18.228.222.138

Когда я пытаюсь отправить метод POST на сервер, обращающийся к publi c DNS, я получаю сообщение от браузера консоли: Access to XMLHttpRequest at 'http://18.228.222.138/uploadFile' from origin 'http://ec2-18-228-222-138.sa-east-1.compute.amazonaws.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Когда я пытаюсь выполнить POST через publi c IPV4 (18.228.222.138), я получаю из браузера консоли: 405 (Not Allowed).

Не могу понять, что мне где не хватает.

Мои коды и конфиги:

Запуск back-end на порту 3333 с npm start или pm2 start npm -- run server. Index.js код:

import cors from 'cors'
import express from 'express'
import routes from './routes'
import fileUpload from 'express-fileupload'
import shell from 'shelljs';
import bodyParser from 'body-parser';

const app = express()

app.use( cors({ origin: '*' }) ); //enable any origin here
app.use(express.json());
app.use(express.static('public'));
app.use(fileUpload({
  useTempFiles : true,
  tempFileDir : '/tmp/'
}));

app.use(routes);
app.disable('x-powered-by');
app.listen(3333);

Блокировать скрипты в серверном пакете. json:

"scripts": {
    "start": "nodemon --exec sucrase-node ./src/index.js",
    "server": "babel-node ./src/index.js",
},

Nginx config:

server {
        listen 80 default_server;
        server_name http://ec2-18-228-222-138.sa-east-1.compute.amazonaws.com ;

    location / {
        root /var/www/FullFinalPaper/front-tcc/build;
        try_files $uri /index.html;

        add_header 'Access-Control-Allow-Origin' '*';
    }

    location /var/ww/FullFinalPaper/front-tcc/src/services/api.js {
        proxy_method POST;
        proxy_http_version 1.1;
        proxy_pass http://18.228.222.138/3333;
   }
}

Ax ios конфигурация, от внешнего интерфейса к внутреннему:

import axios from 'axios';

const api = axios.create({
  baseURL: 'http://18.228.222.138',
});

export default api;

Экземпляр EC2 со всеми исходящими портами и включенными входящими портами S SH, HTTP и HTTPS.

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

получил решение.

Во втором пути местоположения в nginx config он должен указывать путь URL-адреса для метода POST, в моем случае /uploadFile.

В конце концов, мой Nginx конфиг был такой:

upstream backend {
        server 18.228.223.186:3333;
        server 18.228.223.186;
        server localhost:3333;
}

    server {
        listen 80 default_server;
        server_name 18.228.223.186;
        root /var/www/FullFinalPaper/front-tcc/build;

        access_log /var/log/nginx/tcc.com.access.log;
        error_log /var/log/nginx/tcc.com.error.log;

    location / {
        try_files $uri /index.html;
        rewrite //index.html last;
        add_header 'Access-Control-Allow-Origin' '*';
    }

    location /uploadFile  {
        proxy_method POST;
        proxy_http_version 1.1;
        proxy_pass http://backend;
        proxy_redirect default;
        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-Host $server_name;
        error_page 405 =200 $uri;
   }
}
0 голосов
/ 19 июня 2020

Из-за этого 405 может показаться, что проблема с POST не разрешена вашим веб-сервером.

...