-->

2013-08-11

memo: uwsgi + php-embed

http://php.net/manual/ja/install.pecl.static.php
http://www.php.net/manual/ja/faq.installation.php#faq.installation.apache2
http://uwsgi-docs.readthedocs.org/en/latest/Options.html#enable-threads
https://github.com/unbit/uwsgi-docs/blob/master/PHP.rst
http://uwsgi-docs.readthedocs.org/en/latest/Install.html
http://wiki.nginx.org/HttpUwsgiModule
http://wiki.nginx.org/HttpUwsgiModuleMultipleDynamicApplications
http://wiki.nginx.org/HttpUwsgiModule#uwsgi_next_upstream
http://uwsgi-docs.readthedocs.org/en/latest/Nginx.html
http://wiki.nginx.org/NginxHttpUpstreamModule#upstream
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-servers/uwsgi/files/1.1.2-threaded-php.patch?diff_format=s&view=markup
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-servers/uwsgi/uwsgi-1.4.9.ebuild?view=markup

cd /usr/local/src/
sudo mkdir nginx-uwsgi-php
sudo chown userName.userName nginx-uwsgi-php/
cd nginx-uwsgi-php/
wget http://nginx.org/download/nginx-1.5.3.tar.gz
wget http://jp2.php.net/get/php-5.5.1.tar.bz2/from/jp1.php.net/mirror
file mirror
mv -i mirror php-5.5.1.tar.bz2
cp -i /usr/portage/distfiles/uwsgi-1.4.9.tar.gz .
tar xzvf nginx-1.5.3.tar.gz
cd nginx-1.5.3

PATH="/usr/bin:/bin" CFLAGS="-march=native -O2" CHOST="x86_64-pc-linux-gnu" CXXFLAGS="-march=native -O2" ./configure --prefix=/usr/local/nginx-uwsgi-php --without-select_module --without-poll_module --without-http_charset_module --without-http_gzip_module --without-http_ssi_module --without-http_userid_module --without-http_access_module --without-http_auth_basic_module --without-http_autoindex_module --without-http_geo_module --without-http_map_module --without-http_split_clients_module --without-http_referer_module --without-http_rewrite_module --without-http_proxy_module --without-http_fastcgi_module --without-http_scgi_module --without-http_memcached_module --without-http_limit_conn_module --without-http_limit_req_module --without-http_empty_gif_module --without-http_browser_module --without-http_upstream_ip_hash_module --without-http_upstream_least_conn_module --without-http_upstream_keepalive_module --without-http-cache --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-pcre

make
make install
sudo make install

cd /usr/local/nginx-uwsgi-php/conf/
diff nginx.conf.default nginx.conf
emacs nginx.conf
...

opcache未対応, xcacheエラー, apcエラーだった。
php-embedはアクセラレーターが使えない。多分。使えるのがあるかも。
http://en.wikipedia.org/wiki/List_of_PHP_accelerators

手前に必要な機能だけのnginx + apache.worker(もしくはevent)+mod_phpでapacheはmod_php以外のことをしない。できなくする。最低限の状態にする。
apacheはcpuの数だけ立ち上げる。もしくはcpux2+1など。
とすればphpだけでthread safeな状態で、なんかあってもwebサーバまでは巻き込まないとか。
nginxはupstreamの基本機能だけもしくは追加とか。nginx -tで機能が足りない=>再インストール。
もしくは面倒なのでそんなことしない。
普通にapache.workerかapache.eventでthread safeでServerLimit,StartServersをcpu数にして動かせばいい。

dev-php/pecl-apc-3.1.13はapache.workerと相性が悪いかもしれない。
dev-php/pecl-zendopcache-7.0.2はOKっぽい。5.5.1のソースではext/の下にある。
http://pecl.php.net/package/ZendOpcache
http://www.1x1.jp/blog/2013/04/php55_replace_apc_with_zend_opcache.html

$ grep -B79 NGX_HTTP_UPSTREAM_FT_UPDATING ./src/http/ngx_http_upstream.c | head -n5
#if (NGX_HTTP_CACHE)

static ngx_int_t
ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
{

$ grep -A2 -B2 NGX_HTTP_UPSTREAM_FT_UPDATING ./src/http/ngx_http_upstream.c
    case NGX_HTTP_CACHE_UPDATING:

        if (u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING) {
            u->cache_status = rc;
            rc = NGX_OK;

$ grep -B8 -A3 NGX_HTTP_UPSTREAM_FT_UPDATING ./src/http/modules/ngx_http_uwsgi_module.c
static ngx_conf_bitmask_t ngx_http_uwsgi_next_upstream_masks[] = {
    { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR },
    { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
    { ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
    { ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
    { ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
    { ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
    { ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
    { ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
    { ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
    { ngx_null_string, 0 }
};

0 件のコメント: