Вопрос из интервью: Настроен ли nginx?Знает ли обратный прокси?

JavaScript


Эта статья в основном посвящена междоменной настройке, и если большие ребята могут ее настроить, вам не нужно ее читать

Кратко опишите обратный прокси и прямой прокси

Обратный прокси:

Мы отправляем запрос на сервер, а затем сервер пересылает наш запрос, нам просто нужно связаться с прокси-сервером, украсть картинку:


Прокси вперед:

Для целевого сервера настоящий клиент не щупается, а прокси-клиент общается с ним.Например, софт научного гугла - форвард-прокси, ворует картинку:

В качестве примера прямого прокси,я (клиент)Вы не можете выйти без зеленого кода, нодруг(играет роль)имеют,я (клиент)Позволятьдруг(играет роль)пойти в супермаркет, чтобы купить бутылку воды, и длясупермаркет (сервер)Другими словами, они не воспринимаютя (клиент)существования, это прямой прокси.  

В качестве примера обратного прокси,я (клиент)Позволятьдруг(играет роль)Иди, купи мне бутылку воды, все равно не сказал, где ее купить.друг(играет роль)выкупил, зая (клиент)Говорящий,я (клиент)незаметныйсупермаркет (сервер)Существование этого обратного прокси.

В двух словах, серверные прокси называются обратными прокси, а клиентские прокси называются прямыми прокси.

Как настроен nginx?

скачать nginx

http://nginx.org/en/download.html

Каталог файлов


Я не изучал другие каталоги, и я не имею никакого отношения к этому кросс-домену (я еще не изучил его~)

запустить службу

В этом каталоге откройте командную строку cmd, введите nginx, также можно дважды щелкнуть nginx.exe, но это не интуитивно, доступ к порту Localhost:80, вы можете увидеть интерфейс ниже,


Если вам это не нужно, вы можете изменить его самостоятельно и войти в каталог файла конфигурации.


Оптимизировать код конфигурации

Файл после удаления комментариев и посторонний код выглядит так:


  1. Поля root и index в первой локации тоже можно удалить, в конце концов, и у нашего междоменного отношения нет ~
  2. Страница error_page в красном поле и место под ним также могут быть удалены по той же причине, что и выше.
Код после удаления двух вышеуказанных элементов выглядит следующим образом:


запустить службу

Сначала запустите службу узла:

const http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {
        'Content-Type': 'application/json;charset=utf-8'
    });
    // 这个例子中要回传的data
    let data = {
        name: 'nginx proxy'
    };

    data = JSON.stringify(data);

    response.end(data);

}).listen(8887);

console.log('server1 is listen at 8887 port');

Демонстрация ошибок

После запуска службы мы обращаемся к ней напрямую, чтобы смоделировать междоменный сценарий:

<body>
    <h1>nginx反向代理</h1>
    <script>
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://localhost:8887');
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    console.log(xhr)
                }
            }
        }
    </script>
</body>

Конечно же, сообщалось о междоменной ошибке:


начать настройку

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {

        }
    }
}

Мы добавляем два поля к местоположению:

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass  http://localhost:8887;
            add_header  Access-Control-Allow-Origin *;
        }
    }
}
  1. proxy_pass, представляющий порт сервера для проксирования
  2. add_header, друзья, знакомые с CORS, должны знать, это заголовок ответа конфигурации
  3. listen, который представляет прослушивающий порт

Теперь измените код запроса:

<body>
    <h1>nginx反向代理</h1>
    <script>
        var xhr = new XMLHttpRequest();
        // 在这里把原来的localhost:8887修改成localhost:80
        xhr.open('GET', 'http://localhost:80');
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    console.log(xhr)
                }
            }
        }
    </script>
</body>

Перезапустите службу после модификации.Здесь есть два метода, но оба должны открыть новую командную строку cmd в каталоге файлов.

  1. Перезагрузитесь напрямую. войти

    nginx -s reload

  2. Выключите, а затем включите. войти

    nginx -s stop
    nginx


Если вы хотите отправить запрос в папку api на сервере, вам нужно только изменить это поле в файле конфигурации.

location /api {
    // 你的代码,如
    // proxy_pass 你的路径
    // add_header Access-Control-Allow-Origin *;}