Итак, некий голос совести не позволил мне поднять свой блог на традиционно обкатанном решении, которым почти все пользуются: apache + mod_php5 + mod_rewrite, так что авантюрная жилка подсказала заняться сабжем.Итак, что мы имеем:
- FreeBSD
- /usr/ports/www/nginx (stable)
- /usr/ports/lang/php5 (как fastcgi)
Думаю подробно останавливаться на этом нет смысла.
Вопрос 1: Как запустить и настроить php под fastcgi ?
Вариант 1: использовать spawn-fcgi из комплекта light-httpd. Лично мне не понравилось, лишняя примочка.
Вариант 2: использовать php-fpm патч. Хорошая штука, но про нее я расскажу в другом обзоре, т.к. более полезна она для несколько иных вещей.
Вариант 3: заставить php самостоятельно выполнять этот тяжкий труд. На просторах инета был встречен красиво причесанный скрипт для автостарта, который умеет массу полезных вещей:
- хранить в rc.conf переменные, которые рассказывают php как жить и что делать (пользователь из под кого работать, ip, порт, список разрешенных переменных окружения)
- и, соответственно, как полагается честному скрипту - стопить/стартить демона
Вопрос 2: Как настроить nginx
Весьма полезным будет прочитать документацию и архив рассылки.
nginx.conf
user www www; worker_processes 2; events { worker_connections 1024; use kqueue; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$uri?$args"'; access_log /var/log/nginx-access.log main; sendfile on; keepalive_timeout 65; # не то чтобы я экономил на траффике, но все же текст к пользователю прийдет быстрее gzip on; # т.к. хостов у меня крутится много - в одном конфиге держать неудобно include vhost/*; }
vhost/domain.com
server { listen 192.168.111.222:80; server_name domain.com www.domain.com; root /.1/www/domain/public_html; index index.html index.php; # хочу кешировать картинки и фильмы 30 дней # css и js кешировать тоже можно, но пока не хочу т.к. правлю тему. location ~* ^.[^&?]+\.(jpg|jpeg|gif|rar|zip|bmp|wmv|m4v|png)$ { expires 30d; } # Поддержка permalinks (ЧПУ) if (!-e $request_filename ) { rewrite ^/.* /index.php break; } # фактически, не имеет смысла т.к. !-e секцией выше отрабатывает только # если файл/директория/симлинк не найден, т.е. 404 error_page 404 /index.php; # отправим запрос бэкенду location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /.1/www/zlovred/public_html$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
Вопрос 3: ЧПУ (Permalinks) в Wordpress
Идем в Options » Permalinks и выбираем понравившийся стиль ссылок.
Ньюанс: wordpress может предложить URL вида:
http://www.domain.com/index.php/2007/10/15/sample-post/
Наличие index.php нам абсолютно неинтересно и, если все сделано правильно, мы можем выбрать кастомную настройку и удалить вручную index.php, оставив что-то вида:
/%year%/%monthnum%/%day%/%postname%/