Как исправить proxy_pass в конфиге Nginx? - PullRequest
0 голосов
/ 29 июня 2019

Я ввожу Nginx 1.16 и использую certbot для применения сертификата ssl.

Мой домен: h - ps: //test.mydomain.com/

Я пересылаю http на https.Если я наберу

  • h - p: //test.mydomain.com/

, то получится

  • h--ps: //test.mydomain.com/

Также я изменяю страницу всех ошибок, чтобы она указывала на страницу index.html по умолчанию.Вся ошибка, например 404, теперь показывает по умолчанию index.html.

Если я наберу h - ps: //test.mydomain.com/admin1, ничего не произошло.Я пытаюсь перенаправить admin1 и admin2 с помощью proxy_pass.

Мой proxy_pass перенаправляет admin1 и admin2 на мой локальный сервер dart.

Я использую Ubuntu 18.04, и мой / etc / host отображается как;

  • localhost 127.0.0.1
  • mymachinename 127.0.1.1

Если я наберу h - p: //127.0.0.1:3000 / admin1 / я вижу, что данные отправляются на мой сервер dart.

Если я наберу h - p: //127.0.0.1 или h - p: //127.0.1.1 Я могу видеть мой index.html по умолчанию

(A) Если я наберу их, я получу default.html

  • h ** ps: //test.mydomain.com
  • ч ** пс: //test.mydomain.com/
  • ч ** пс: //test.mydomain.com/fdfhrhtrh

(B) Но я печатаю их, я ничего не получаю.Это означает, что мой proxy_pass не работает.

  • h ** ps: //test.mydomain.com/admin1
  • h ** ps: //test.mydomain.com/admin1 /
  • ч ** пс: //test.mydomain.com/admin1/frtdef
  • ч ** пс: //test.mydomain.com/admin1/ts345hj
  • ч ** пс: //test.mydomain.com/admin2
  • ч ** пс: //test.mydomain.com/admin2/
  • ч ** пс: //test.mydomain.com/admin2/frtdef
  • h ** ps: //test.mydomain.com/admin2/ts345hj

Мое намерение состоит в том, что если я наберу что-либо в выше(B) должен быть перенаправлен на мой сервер дартс.

Пример:

  • ч - ps: //test.mydomain.com/admin1/frtdef

должно бытьперенаправить как

  • h - p: //127.0.0.1: 3000 / admin1 / frtdef

h - ps: // test.mydomain.com / admin1 или что-то еще, после того как admin1 и admin2 должны быть перенаправлены на h - p: //127.0.0.1: 3000 / как h - p: //127.0.0.1: 3000 / admin1

На странице ошибок и в том числе на странице ошибки должен отображаться файл index.html по умолчанию, и только эта часть работает.

У меня вопрос, как исправить мою конфигурацию Nginx proxy_pass?

add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

server {
    charset UTF-8;
    listen      80;
    listen [::]:80;
    server_name  test.mydomain.com;

    if ($host = test.mydomain.com) {
        return 301 h**ps://$host$request_uri;
    } # managed by Certbot
    return 404; # managed by Certbot
}

server {
    charset UTF-8;
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    server_name  test.mydomain.com;

    ssl_certificate /etc/letsencrypt/live/test.mydomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.mydomain.com/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

    access_log  /var/log/nginx/host.access.log  main;

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

    # redirect error pages to the static page
    error_page 404  /index.html;
    location = /index.html {
        root /usr/share/nginx/html;
        internal;
    }

    # redirect server error pages to the static page
    error_page   500 502 503 504  /index.html;
    location = /index.htm {
        root /usr/share/nginx/html;
        internal;
    }

    # redirect to
    location /admin1 {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "h**p://127.0.0.1:3000/";
        try_files $uri $uri/ =200;
    }

    # redirect to
    location /admin2 {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "h**p://127.0.0.1:3000/";
        try_files $uri $uri/ =200;
    }

    # deny access to .htaccess files
    location ~ /\.ht {
        deny  all;
    }

    # Deny access to hidden files (beginning with a period)
    location ~ /\. {
         deny all;
    }

}

Обновление:

Когда я просматриваю документацию (h --- ps: //www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching) для (location / match / here {proxy_pass http://example.com;}) это говорит о том, что

«когда запрос для / match / here / please обрабатывается этим блоком, URI запроса будетотправлять на сервер example.com как http://example.com/match/here/please”. I

В моем example config;location / admin1 {proxy_pass "h p: //127.0.0.1: 3000 /";} не переходит на h p: //127.0.0.1: 3000 / admin1

Я не являюсьуверен, что моя конфигурация etc / host неверна или нет.

Update-2:

Журнал ошибок Nginx показывает;

2019/06/2913:27:37 [ошибка] 24590 # 24590: * 12 open () «/ usr / share / nginx / html / admin1» не удалось (2: такой файл или каталог отсутствует), клиент: 127.0.0.1, сервер: тест.Запрос mydomain.com: «GET / admin1 HTTP / 2.0», хост: «test.mydomain.com»

Как исправить эту ошибку, чтобы я мог перенаправить URL-адрес / admin?

...