原生编译nginx使支持php-fpm以及passenger

最近想用rails写个小网站,发现要把rails工程发布成production还是要花很多功夫的.之前服务器上装的是nginx+php-fpm来支持php,为了使nginx来服务rails,就必须重新编译nginx,使之支持passenger.用nginx来服务rails大都是直接通过’passenger-install-nginx-module’实现的,但是由于之前已经装了nginx,用这个方法就不方便.本文通过原生编译nginx来使之支持passenger.

个人原创,版权所有,转载请注明出处,并保留原文链接:

http://www.embbnux.com/2014/11/19/compile_nginx_for_php-fpm_passenger_rails/

参考: phusion passenger users guide, nginx version  nginx 官方文档

一 php和rails passenger环境

我的电脑是ubuntu 14.04

安装php-fpm:


sudo apt-get install php5-fpm

安装rails passenger


curl -L https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 2.0.0
rvm 2.0.0 --default
gem install rails
gem install passenger

查看passenger安装目录,后面会用到:


passenger-config --nginx-addon-dir
#类似/home/user/.rvm/gems/ruby-2.0.0-p481/gems/passenger-4.0.48/ext/nginx
passenger-config --root
#类似/home/user/.rvm/gems/ruby-2.0.0-p481/gems/passenger-4.0.48

二 下载编译nginx

安装编译环境包:


sudo apt-get install build-essential libpcre3-dev libssl-dev zlib1g

下载官方的nginx包,编译安装


wget http://nginx.org/download/nginx-1.7.7.tar.gz
tar zxvf nginx-1.7.7.tar.gz
cd nginx-1.7.7
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--add-module=/home/user/.rvm/gems/ruby-2.0.0-p481/gems/passenger-4.0.48/ext/nginx \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
make
sudo make install

这样就编译安装好了nginx,同时支持php-fpm和passenger,nginx配置目录在/etc/nginx/下

三 nginx配置php-fpm以及passenager

现在配置nginx使其中本地上的两个网站,一个基于php,一个基于ruby on rails

配置文件:/etc/nginx/nginx.conf


user  www-data www-data;
worker_processes  1;

pid        /var/run/nginx.pid;

events {
worker_connections  1024;
}

http {
passenger_root /home/user/.rvm/gems/ruby-2.0.0-p481/gems/passenger-4.0.48;
passenger_ruby /home/user/.rvm/wrappers/default/ruby;
passenger_max_pool_size 10;

include       mime.types;
default_type  application/octet-stream;

keepalive_timeout  10;
types_hash_bucket_size 64;
server_names_hash_bucket_size 128;

client_max_body_size 2m;
index              index.php index.html index.htm;

upstream php {
#this should match value of "listen" directive in php-fpm pool
server unix:/var/run/php5-fpm.sock;
#               #               server 127.0.0.1:9000;
#
#
}

#php server
server {
server_name 127.0.0.1;
root /var/www/webphp;

index index.php;

location ~ /\. {
deny all;
}

location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
#works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)

include fastcgi.conf;
fastcgi_index index.php;
fastcgi_pass php;
}

}
#rails server
server {
server_name localhost;
root /home/user/railsapp/public;

location / {
#root   html;
root /home/user/railsapp/public;
index  index.html index.htm;
passenger_enabled on;
rails_env production;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {

}
}
}

然后启动nginx就可以了: sudo nginx

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.