nginx で vhost の設定 / uwsgi と fpm-php

完全に備忘録です。

実用サーバではなくテスト動作用のローカル環境の設定メモとして残します。 セキュリティ的なことにはまったく触れていないので注意。 あくまで、手元でwordpressやwsgiをいじってみただけの設定です。

拾い集めたものなので、公式を当たっていただいたほうが確実です。

ごく簡単に解説

"django.localnet"と"wordpress.localnet"をvhostsとして参照します。管理のためにファイルを分けて、includeしています。 どちらも、unix socketで受けていて、httpへのアクセスは全てhttpsへ回しています。 パス回りはそれぞれの環境に合わせてください。

django

djangoはstatic以下を高速に参照するために、ファイルを集めておくことができます。


# settings.py に 次の様にSTATIC_ROOT を追加
# STATIC_ROOT = os.path.join(BASE_DIR, 'static')

python manage.py collectstatic

djangoには、別途uwsgiの設定も必要です。

wordpress

proxy設定はコメントアウトしています。

設定

/etc/nginx/nginx.conf

user   nginx nginx;
worker_processes 3;

error_log  /var/log/nginx/error_log info;

events {
 worker_connections 1024;
 use   epoll;
}

http {
 include   /etc/nginx/mime.types;
 default_type  application/octet-stream;

 log_format  main
    '$remote_addr - $remote_user [$time_local] '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';

 client_header_timeout 10m;
 client_body_timeout 10m;
 send_timeout  10m;

 connection_pool_size  256;
 client_header_buffer_size 1k;
 large_client_header_buffers 4 2k;
 request_pool_size  4k;

 gzip   on;
 gzip_min_length  1100;
 gzip_buffers  4 8k;
 gzip_types  text/plain;

 output_buffers  1 32k;
 postpone_output  1460;

 sendfile  on;
 tcp_nopush  on;
 tcp_nodelay  on;

 keepalive_timeout 75 20;

 ignore_invalid_headers on;

 index   index.html;

 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 10m; 

 proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache-space:4m max_size=50m inactive=120m;
 proxy_temp_path /var/lib/nginx/tmp; 

 include vhosts/django.localnet.conf;
 include vhosts/wordpress.localnet.conf;
}
/etc/nginx/nginx.conf/vhosts/django.localnet.conf

# ##############################################################################
# django
server {
  listen  80;
  server_name django.localnet;
  return  301 https://$host$request_uri;
}
# ==============================================================================
server {
  listen  443 ssl;
  server_name  django.localnet;
  ssl_certificate /etc/ssl/nginx/nginx.pem;
  ssl_certificate_key /etc/ssl/nginx/nginx.key;
  keepalive_timeout 70;
  access_log  /var/log/nginx/django.localnet.access_log main;
  error_log  /var/log/nginx/django.localnet.error_log info;
  # ----------------------------------------------------------------------------
  location / {
 include  uwsgi_params;
 uwsgi_param SCRIPT_NAME /;
 uwsgi_modifier1 30;
 uwsgi_pass unix://tmp/django.sock;

 proxy_cache  cache-space;
 proxy_cache_valid 200 302 60m;
 proxy_cache_valid 404 10m;
  }
  # ----------------------------------------------------------------------------
  location /static/ {
 if ($http_referer !~* (django.localnet) ){
  return 403;
 }
 root  /home/hanepjiv/projects/django;
 autoindex off;
 expires  4h;
  }
}
/etc/uwsgi.d/django.xml

<uwsgi>
    <plugins>python33</plugins>
    <master>true</master>
    <processes>3</processes>
    <vaccum>true</vaccum>
    <chmod-socket>660</chmod-socket>
    <socket>/tmp/%n.sock</socket>
    <uid>nginx</uid>
    <gid>nginx</gid>
    <pythonpath>/home/hanepjiv/projects/%n</pythonpath>
    <module>django.wsgi</module>
</uwsgi>
/etc/nginx/nginx.conf/vhosts/wordpress.localnet.conf

# ##############################################################################
# wordpress
server {
  listen  80;
  server_name  wordpress.localnet;
  return  301 https://$host$request_uri;
}
# ==============================================================================
server {
  listen  443 ssl;
  server_name  wordpress.localnet;
  ssl_certificate /etc/ssl/nginx/nginx.pem;
  ssl_certificate_key /etc/ssl/nginx/nginx.key;
  keepalive_timeout 70;
  access_log  /var/log/nginx/wordpress.localnet.access_log main;
  error_log  /var/log/nginx/wordpress.localnet.error_log info;
  # ----------------------------------------------------------------------------
  location / {  
 root  /home/hanepjiv/projects/wordpress;
 index  index.php;
 if (!-e $request_filename) {
    rewrite ^/(.+)$ /index.php?q=$1 last;
    break;
 }  
  }
  location ~ \.php {     
 root  /home/hanepjiv/projects/wordpress;

 fastcgi_pass unix:/tmp/fpm-php5.5.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME  /home/hanepjiv/projects/wordpress$fastcgi_script_name;
 include  fastcgi_params;

 #proxy_cache  cache-space;
 #proxy_cache_valid 200 302 60m;
 #proxy_cache_valid 404 10m;
  }
}

0 件のコメント:

コメントを投稿