Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Господа, выручайте!
Уже не знаю как пробовать.
Суть. Nginx, laravel5, сайт работает через https.
Работая с одним сервисом сторонним - они работают лишь по http, ну не могут ни обращаться на https. Потому мне необходимо 1 url сделать так, чтоб он работал по http.
Вот коротко мой конфиг - стандартный
server {
listen :80;
server_name test.com www.test.com;
index index.php
set $root_path /var/www/test.com/public;
root $root_path;
return 301 https://test.com:443$request_uri;
}
server {
listen :443 http2;
server_name test.com;
rewrite ^/(.*)/$ /$1 permanent;
ssl on;
ssl_certificate ...
....
index index.php;
disable_symlinks if_not_owner from=$root_path;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /index.php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f help@test.ru";
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f help@test.com";
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
}
google пользоваться умею, видел некие варианты, тестировал, но ничего не работает (
Может кто поможет ?
Делал как тут https://serverfault.com/questions/27033 … -on-others но вот что-то не срастается) не пойму куда девать try_files $uri $uri/ /index.php?$query_string;
Не в сети
Я могу ошибаться, но если подключил к ип шттпс, то там уже ничего не исправить ибо шттпс сертификат подключается самым первым и все последующее игнорирует.
Знаю точно и наверно так бы сам сделал:
1)Привязать 1 ип к сайту с шттпс
2)Создать поддомен и привязать к нему другой ип, тогда можно использовать шттп (с этого поддомена обращаться к вашему сервису)
3)Настроить поддоменный роутинг у ларавел
пс - лично мое имхо
Не в сети
Я могу ошибаться, но если подключил к ип шттпс, то там уже ничего не исправить ибо шттпс сертификат подключается самым первым и все последующее игнорирует.
Знаю точно и наверно так бы сам сделал:
1)Привязать 1 ип к сайту с шттпс
2)Создать поддомен и привязать к нему другой ип, тогда можно использовать шттп (с этого поддомена обращаться к вашему сервису)
3)Настроить поддоменный роутинг у ларавелпс - лично мое имхо
Да, это как вариант - делать поддомен на http и через него решать это. Но это самый мощный костыль из всех костылей ) Для 1 роутинга - проект выносить целиком еще на 1 поддомен. ТАк дела точно не решаются) Вот и прошу помощи у форумчан.
Не в сети
Выносить? Вы о чем?
1)Добавляете в роут маршрут
2)Создаете поддомен
3)В конфиге нгинкс (этого поддомена) root указываете папку основного проекта и все) зачем что-то выносить?))))))))))
Как по мне решается быстро и без заморочек ибо "перекрыть" шттпс сертификат будет проблемнее, если вообще реально, я думаю такие вопросы лучше на форумах сис админов узнавать...
Изменено adams (21.06.2017 17:35:09)
Не в сети
- Я могу ошибаться, но если подключил к ип шттпс, то там уже ничего не исправить ибо шттпс сертификат подключается самым первым и все последующее игнорирует.
Что ты говоришь? Нет такого понятия, как «ип шттпс», любой IP может быть хоть «HTTPS», хоть «HTTP», хоть «ssh», хоть какой угодно. HTTPS (как и ssh и прочее) это протокол взаимодействия с сервером, он никак не конфликтует с сервисами на других портах.
Проблемы с HTTP+S могут быть, если использовать HSTS (который заставляет браузер всегда использовать HTTPS для данного домена, если уже был хотя бы один запрос по HTTPS к нему), но опять же для ботов это не актуально, боты/скрипты HSTS игнорируют. Да и заголовка HSTS в конфиге автора nginx нет.
Настроить доступ одновременно и по HTTP, и по HTTPS вполне можно, хоть на одном домене, хоть на одной странице, хоть даже на определённой комбинации факторов (cookie + параметры запрос и т.п.). Это же nginx.
Для пути это делается просто — через location:
confserver {
listen *:80;
server_name .test.com;
location /plain-http-route/foo/bar/baz {
include server.conf;
}
return 301 https://test.com$request_uri;
}
server {
listen *:443 ssl http2;
server_name .test.com;
include server.conf;
}
Не в сети
Proger_XP, вы видимо не поняли о чем я...но да бог с ним, я высказал свою точку зрения по поводу решения проблемы, если у тса выйдет на 1 домене связать шттпс протокол + шттп - пусть отпишется в теме ибо я как-то пробовал сделать подобное, но у меня не вышло ибо у меня стояла переадресация с шттп на шттпс и ее нужно было оставить, если у тса такого нет(переадресации), то возможно вы и правы...
Не в сети
}%>
Для пути это делается просто - через location:
%%(conf)
server {
listen *:80;
server_name .test.com;location /plain-http-route/foo/bar/baz {
include server.conf;
}
return 301 https://test.com$request_uri;
}server {
listen *:443 ssl http2;
server_name .test.com;
include server.conf;
}
%%В %%server.conf%% - всё что я убрал из оригинального конфига.
Я как раз приложил ссылку где это так же делается - через location
Но мне надо же как то еще и привязать тут
try_files $uri $uri/ /index.php?$query_string;
вот тут что-то и не вышло у меня
Не в сети
- ибо у меня стояла переадресация с шттп на шттпс и ее нужно было оставить, если у тса такого нет(переадресации)
Переадресация (redirect в nginx) может использоваться не только на уровне server, но и в location, и в if. Поэтому можно оставить условную переадресацию на HTTPS, что я и показал в примере.
У автора темы тоже есть переадресация, только через return (сути это не меняет).
- Но мне надо же как то еще и привязать тут
try_files можно использовать в location, но если нужно просто обработать по HTTP один маршрут (т.е. один конкретный URL, не считая ?querystring) — то try_files вообще не нужен.
Не в сети
}%> ибо у меня стояла переадресация с шттп на шттпс и ее нужно было оставить, если у тса такого нет(переадресации)
Переадресация (redirect в nginx) может использоваться не только на уровне server, но и в location, и в if. Поэтому можно оставить условную переадресацию на HTTPS, что я и показал в примере.У автора темы тоже есть переадресация, только через return (сути это не меняет).
> Но мне надо же как то еще и привязать тут
try_files можно использовать в location, но если нужно просто обработать по HTTP один маршрут (т.е. один конкретный URL, не считая %%?querystring%%) - то try_files вообще не нужен.Какой/какие именно URL нужно отдавать по HTTP?
url будет 1 = sms-code, мне туда всегда POST с параметрами прилетать будет. Эт внешний сервис туда стучаться будет
Изменено Dido (21.06.2017 21:14:20)
Не в сети
Тогда try_files не нужен. Вообще, конфиг явно составленный из фрагментов из Google с лишними конструкциями (например, зачем location @php, если она не используется?), но в целом попробуй такой вариант:
confserver { listen *:80; server_name .test.com; location /sms-code { fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f help@test.ru"; fastcgi_pass unix:/var/www/php-fpm/www-root.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } return 301 https://test.com$request_uri; } server { listen *:443 ssl http2; server_name .test.com; rewrite ^/(.*)/$ /$1 permanent; ssl_certificate ... .... index index.php; disable_symlinks if_not_owner from=$root_path; location / { try_files $uri $uri/ /index.php?$query_string; } location = /index.php { fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f help@test.ru"; fastcgi_pass unix:/var/www/php-fpm/www-root.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } }
То есть блок listen *:443 ssl http2 не меняется, а в location /sms-code — то же, что и в location = /index.php.
Не в сети
Сделал как ты описал, но все равно
server_wrong_http_code HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 21 Jun 2017 19:36:38 GMT
Content-Type: text/html
Content-Length: 178
Connection: close
т е редиооектит на https(
Не в сети
Помести return в отдельный location.
confserver { listen *:80; server_name .test.com; location /sms-code { fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f help@test.ru"; fastcgi_pass unix:/var/www/php-fpm/www-root.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } location / { return 301 https://test.com$request_uri; } }
Не в сети
вот боюсь тут ему и не хватает
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Это же ообяхательное услоовтя для Laravel
отдает он по твоему примеру
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
Изменено Dido (21.06.2017 23:13:01)
Не в сети
try_files в такой форме здесь ни при чём. Я дал только заготовку конфига.
Вот работающий вариант, но с Laravel не проверял, пусть кто-то из форумчан допилит, если не работает. Нужно заменить root, директивы fastcgi (я оставил минимальный набор) и содержимое server/ssl (для тестов оно значения не имеет).
nginx и php-fpm (5.5) на Ubuntu.
confserver { listen *:80; location ~ ^/sms-code$ { root /var/www/http/; try_files /index.php =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } location / { return 302 https://127.0.0.1$request_uri; } } server { listen *:443 ssl; root /var/www/ssl/; ... }
<?php phpinfo();
curl -v http://127.0.0.1/sms-code
< X-Powered-By: PHP/5.5.9 phpinfo...
curl -v http://127.0.0.1/sms-codeZ
< Location: https://127.0.0.1/sms-codeZ
< Location: https://127.0.0.1/xxx
Не в сети
NOT FOUND говорю же играет
Не в сети
Он то рабочий - ссылку, которыую я в самом начале прикреплял - тоже рабочая, НО для Laravel - не работает. Чего-то не хватает. Вот и написал сюда
Не в сети
слушай, найди уже нормального сисадмина, дай ему денег, тебе всё нормально сделают…
Не в сети
confserver { listen *:443 ssl; ssl_certificate cert/server.crt; ssl_certificate_key cert/server.key; root /var/www/ssl/public/; index index.php; try_files /index.php?$query_string =404; location / { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_pass 127.0.0.1:9000; } }
Не в сети
Proger_XP, чёт по-моему этот конфиг все запросы в пхп завернёт включая статику и ассеты ) всё-таки в try_files должно быть $uri $uri/ в начале. и =404 в конце наверное не нужен – всё-таки index.php всегда есть
Не в сети
- чёт по-моему этот конфиг все запросы в пхп завернёт включая статику и ассеты )
Да, но он работает. Я всё за вас буду делать?
- всё-таки в try_files должно быть $uri $uri/ в начале.
Подозреваю, что только $url не обойдёшься, придётся еще директивы для fpm добавлять. Пробуйте.
- и =404 в конце наверное не нужен – всё-таки index.php всегда есть
Не в сети
}%%%(conf)
server {
listen *:443 ssl;
ssl_certificate cert/server.crt;
ssl_certificate_key cert/server.key;
root /var/www/ssl/public/;
index index.php;
try_files /index.php?$query_string =404;location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass 127.0.0.1:9000;
}
}
%%
c 443 - проблем нет
server {
listen *:80;
location ~ ^/sms-code$ {
root /var/www/http/;
try_files /index.php =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
location / {
return 302 https://127.0.0.1$request_uri;
}
}
с порт 80 - redirect работает(если любой url, оитличный от заданного), но сам url = /sms-code - отдает 404. Вот и полагаю, что в этом Location - как-то не доработано что-то. В частности нет фишки try_files /index.php?$query_string =404
С этим вопросом я то и обратился сюда, господа! ссылку прикрепил на реализацию через location, но как я там и описал - что-то не так, отдает 404 по заданному urk и все тут (
Proger_XP - ты хорошо мыслишь, но вот капельку чего-то не хватает тут. Если до конца поможешь с этим вопросом - я тебе сразу 300р на тел переведу(в личку его напиши ток). Это к тому, что я сюда не за халявой пришел или просто тупо лень самому, я в nginx - любитель, конфиги сам себе писал, все работает у меня. Но вот с такой задачей не справился, знаний не хватает и опыта.
Изменено Dido (22.06.2017 16:15:55)
Не в сети
- Если до конца поможешь с этим вопросом — я тебе сразу 300р на тел переведу(в личку его напиши ток).
Ой, ладно. Как будто я здесь за деньги работаю.
Пришли мне в ЛС ссылку на файлы твоего проекта (урезанный, как угодно) со всеми зависимостями, чтобы я распаковал архив и увидел, что нужные страницы открываются через HTTPS. Тогда подгоню конфиг под тебя.
Не в сети
Господа!
С вашей помощью и методом перебора - справился )) Работает )
Вот код
server {
listen :80;
server_name test.com;
charset UTF-8;
ssi on;
index index.php;
set $root_path /var/www/data/www/test.com/public;
root $root_path;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /index.php {
if ($request_uri != /sms-code) {
return 301 https://test.com:443;
}
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
}
Но появилась другая проблема - т к сервис сторонний пинает мне POST-запрос, т случается вот что
TokenMismatchException in compiled.php line 3314
Изменено Dido (22.06.2017 20:24:50)
Не в сети
Не в сети
}%Отключи проверку CSRF-токена для данного маршрута.
а где этоо можно сделать (router.php ?) ? Есть ссылка на доокументацию ?
Не в сети