это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/11/02_nginx.htmlUPD: Спасибо за советы! Проблема решена! Всё получилось:
try_files $uri $uri/?$args $uri/index.php?$args $uri/index.html $uri/index.htm $uri/index.shtml /index.php?$args;
БЫЛО:
Не поможете исправить давнишний баг в настройках nginx.conf?
Ситуация: у меня на сайте lleo.me стоит мой движок и еще есть очень много папок.
Все неизвестные запросы (типа papka/mamka/juchka) nginx должен отправлять на скрипт движка index.php — тот сам разберется со всеми существующими и несуществующими виртуальными именами.
Но если существует физический файл papka/mamka/juchka — следует отдать именно его, не беспокоя движок.
А если это физическая папка papka/mamka/juchka/ — то следует поискать в ней, вдруг там имеется корневой файл: index.php, index.htm, index.html и совсем старый зеноновский index.shtml, или совсем времен 90-x капслоком INDEX.HTM
Сейчас это не работает. Запросы типа:
http://lleo.me/e
http://lleo.me/e/
Выдают нам, как вы можете видеть, привет от nginx: "403 Forbidden nginx/1.4.6 (Ubuntu)", хотя должны были передавать управление движку. Они бы и передали, если бы папка /e/ не существовала, примерно вот так:
http://lleo.me/not-exist-folder
То есть, когда я указываю не реальную папку, а что-то не существующее в файловой системе физически, только тогда вот только тогда nginx передает управление движку, а тот исправно находит в своей базе искомое e/index.htm и честно его отрисовывает:
http://lleo.me/e/index.htm
В чем проблема — не знаю, я не спец в nginx.
Конфиг со всеми вышеописанными ошибками сейчас такой ИСПРАВЛЕННЫЙ КОНФИГ ДОЛЖЕН ВЫГЛЯДЕТЬ ТАК:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;root /var/www/website;
index index.html index.htm index.php index.shtml;
server_name lleo.me;
client_max_body_size 80M;
location /hidden {
deny all;
return 404;
}
location / {
try_files $uri $uri/ /index.php;
try_files $uri $uri/?$args $uri/index.php?$args $uri/index.html $uri/index.htm $uri/index.shtml /blog/index.php?$args;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php5-fpm:
fastcgi_pass unix:/var/run/home-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
fastcgi_param QUERY_STRING qnginx=$request_uri;
}
}
}
Есть идеи?
UPD:
Путанно я объяснил. Суть в том, что при вызове комбинации букв, которая совпадает с реально существующей папкой, nginx кидается искать в ней index.php или index.htm и если не находит, так остро огорчается, что выдает ошибку. А должен — передать управление движку, как во всех остальных случаях. Как крайний вариант, меня даже устроит, если nginx вообще перестанет искать в папке index.php и index.htm — мне не проблема это сделать средствами своего движка.
UPD:
Любопытное заметил: первый раз обращение к 'lleo.me/pesni' (оставим примеры с '/e', а то в комментах люди думают, будто проблема только в папке '/e') вызывает переадресацию на 'lleo.me/pesni/', и только затем — ошибка 403:
$ wget http://lleo.me/e
--2016-11-03 00:20:29-- http://lleo.me/e
Resolving lleo.me (lleo.me)... 104.18.36.157, 104.18.37.157, 2400:cb00:2048:1::6812:259d, ...
Connecting to lleo.me (lleo.me)|104.18.36.157|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://lleo.me/e/ [following]
--2016-11-03 00:20:29-- http://lleo.me/e/
Reusing existing connection to lleo.me:80.
HTTP request sent, awaiting response... 403 Forbidden
2016-11-03 00:20:29 ERROR 403: Forbidden.
К сожалению, к движку nginx все равно не обращается ни в первый запрос, ни во второй.
это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/11/02_nginx.html
Код для генерирования именно этого изображения$generator = new imgGenerator();
$textGenerator=new imgTextGenerator();
$textGeneratorTop=new imgTextGenerator();
$label=$textGeneratorTop
->seTextShadow("#000000", 75, 1, 2, 2)
->setText("Test Site","#ffffff",imgGenerator::position_center_top,"1/12",0 )
->setBackground("#000000",'3%')
->setFont(DR."/upload/fonts/fonts2_7/hinted-PTF55F.ttf");
$text=$textGenerator
->seTextShadow("#000000", 75, 1, 2, 2)
->setText("Морковь как двигатель прогресса человечества","#ffffff",imgGenerator::position_center_center,"1/7",array(0,'5%',0,'5%'))
->setFont(DR."/upload/fonts/fonts2_7/hinted-PTF55F.ttf");
$generator
->addText($text)
->addText($label)
->fromImg($_SERVER["DOCUMENT_ROOT"] . "/upload/dynamic/2016-08/15/carrot-big.jpg")
->resizeFor("autodetect")
->addOverlay(0.5,"#000000")
->show();
Глядя на красивые картинки для соц. сетей, которые в последнее генерируют многие новостные (и не только) сайты — захотелось написать свой генератор.
Скрипт работает на PHP, с использованием модуля Imagick. Писать это на GD2 что-то я не решился.
Алгоритм работы предполагался такой:
- Берем за основу картинку или цвет
- Уменьшаем до нужного размера
- Накладываем сверху полупрозрачный фон
- Устанавливаем логотип
- Добавляем надпись
- Кешируем результат
Читать дальше →