2016-10-18 4 views
0

Я пытаюсь настроить обратный прокси-сервер, используя nginx для приложения nodejs. В настоящее время мое приложение-узел работает на порту 8005 сервера example.com. Запуск приложения и переход на example.com:8005 приложение работает отлично. Но когда я попытался настроить nginx, мое приложение, похоже, работает сначала, перейдя к example.com/test/, но когда я пытаюсь отправить или получить запросы, запрос хочет использовать url example.com:8005, и я получаю ошибка кросс-начала, CORS. Я хотел бы, чтобы URL-адрес запроса отображал URL-адрес nginx, но мне не повезло. Ниже приведен файл nginx default.conf.nginx обратного прокси-сервера не работает для запросов post/get

server { 
    listen  80; 
    server_name example; 

    location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 
    } 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    location /test/ { 
     proxy_pass http://localhost:8005/; 
     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; 
    } 
} 
+0

ваш пост/получать запросы с префиксом '/ тест /' (они падают в к/тест/блок местоположения)? – roger

+0

@roger no мои сообщения не префиксны ни с чем – Woodsy

+0

Если это так, я думаю, они попадают в блок местоположения '/' (который в настоящее время обслуживает статические файлы). Если вы хотите, чтобы они были обработаны процессом вашего узла, вы захотите убедиться, что эти запросы попадают в блок местоположения с прокси-паролем http: // localhost: 8005/ – roger

ответ

1

Должен быть какой-то способ рассказать nginx о том, какое приложение вы используете.

Для этого вы можете прикрепить все apis с помощью теста (location /test/api_uri), а затем уловить все URL-адреса с помощью префикса/теста и прокси-сервера до узла, или если в вашем urk есть определенный шаблон, вы можете поймайте этот шаблон с регулярным выражением, например, предположим, что все app1 apis содержат app1 где-то в нем, затем поймайте эти URL-адреса, используя location ~ /.*app1.* {} location ~ /.*app2.*, убедитесь, что вы поддерживаете order.

Демо-код:

server { 
    ... 
    location /test { 
     proxy_pass http://localhost:8005/; #app1 
     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; 
    } 
    location /test2 { 
     proxy_pass http://localhost:8006/; #app2 
     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; 
    } 
    ... 
} 

Другое Демо для регулярных выражений,

server { 
    ... 
    location ~ /.*app1.* { 
     proxy_pass http://localhost:8005/; #app1 
     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; 
    } 
    location ~ /.*app2.* { 
     proxy_pass http://localhost:8006/; #app2 
     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; 
    } 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^