Я ввожу 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?