Как настроить протокол SPDY через Nginx?
У меня есть приложение rails и вы хотите настроить поддержку протокола SPDY для Google. Но после установки Nginx с патчем SPDY, а затем включения spdy в виртуальный хост, он не позволяет перезапустить nginx, вместо этого выдает следующую ошибку.
Restarting nginx: nginx: [emerg] invalid parameter "spdy" in /etc/nginx/sites-enabled/default:112
nginx: configuration file /etc/nginx/nginx.conf test failed
Я собрал последний nginx 1.3.13 с spdy patch, здесь я упоминаю свои шаги установки
wget http://nginx.org/download/nginx-1.3.13.tar.gz
tar xvfz nginx-1.3.13.tar.gz
cd nginx-1.3.13
# Fetch the SPDY patch and apply it
wget http://nginx.org/patches/spdy/patch.spdy.txt
patch -p1 < patch.spdy.txt
./configure \
--sbin-path=/usr/local/sbin/nginx \
--prefix=/etc/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-log-path=/var/log/nginx/access.log \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--lock-path=/var/lock/nginx.lock \
--pid-path=/var/run/nginx.pid \
--with-debug \
--with-http_addition_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-http_spdy_module \
--with-ipv6 \
--with-sha1=/usr/include/openssl \
--with-md5=/usr/include/openssl \
--with-mail \
--with-mail_ssl_module \
# wget https://you.googlecode.com/files/ngx_cache_purge-1.6.tar.gz
--add-module=/software/ngx_cache_purge-1.6 \
#http://www.openssl.org/source/openssl-1.0.1e.tar.gz
--with-openssl='/software/openssl-1.0.1e'
# Build and install nginx
make && sudo make install
Он успешно компилируется без ошибок.
Результат 0f nginx -V дает следующий
nginx version: nginx/1.3.13
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
TLS SNI support enabled
configure arguments: --sbin-path=/usr/local/sbin/nginx --prefix=/etc/nginx --conf- path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-http_spdy_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/software/ngx_cache_purge-1.6 --with-openssl=/software/openssl-1.0.1e
У моей конфигурации /etc/nginx/site -enabled есть
server {
listen 443 ssl spdy;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
}
После этой успешной установки nginx не перезапустится с параметром spdy в блоке сервера файла с поддержкой сайта.
Любые предложения? Я уверен, что здесь что-то не хватает, но не могу понять.
Ответы
Ответ 1
UPDATE (19 ноября 2013 г.): Изменено script для nginx 1.4.3 (не требуется spdy patch)
https://gist.github.com/deepak-kumar/7541199#file-compile_nginx_1-4-3_with-spdy-sh
Я написал Shell script для установки
https://gist.github.com/deepak-kumar/5069550#file-compile_nginx_with_spdy-sh
Я нашел решение проблемы.
У меня уже был пакет nginx, установленный на моем ubuntu 12.04, даже перед компиляцией этого 1.3.13, который вызывал проблему. $ sudo apt-get install nginx
Чтобы решить эту проблему, я убедился, что /etc/init.d/nginx должен использовать правильный двоичный файл.
Я сделал следующее на терминале:
$ which nginx
$ /usr/local/sbin/nginx
Проверено, что мой существующий /etc/init.d/nginx
script использовал неправильный путь DAEMON
, поэтому я изменил его так, чтобы он выглядел (работает)
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx # $which nginx
Ранее выше значения были (не работают)
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#DAEMON=/usr/sbin/nginx
Остальная часть файла остается такой же. Поэтому, по сути, я использовал правильную двоичную версию версии.
Обновление: этот блог также является очень хорошим ориентиром, если вы заинтересованы.
http://blog.bubbleideas.com/2012/08/How-to-set-up-SPDY-on-nginx-for-your-rails-app-and-test-it.html