h1. Nginx编译,安装配置
* Nginx是啥?
Apache知道吧,Nginx和他一样也是webserver,不过他比Apache快,据说快很多很多,尤其是在高负荷的时候。
BTW,这玩意是某俄国大牛一个人写的......
* 编译
./configure --prefix=/usr/local/nginx
make && make install
* 配置虚拟主机
/usr/local/nginx/conf/nginx.conf 内容如下
<pre>
user www;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# [Add by lemon] Include vhost config
include /usr/local/nginx/conf/vhost/www_site1_com.conf;
include /usr/local/nginx/conf/vhost/www_site2_com.conf;
}
</pre>
/usr/local/nginx/conf/vhost/www_site1_com.conf 内容如下
<pre>
server {
listen 192.168.188.132:80;
client_max_body_size 100M;
server_name www.site1.com;
#charset gb2312;
index index.html index.htm index.php;
root /home/www/site1; #你的站点路径
#打开目录浏览,这样当没有找到index文件,就也已浏览目录中的文件
autoindex on;
if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
error_page 404 /404.html;
location = /40x.html {
root /home/www/site1; #你的站点路径
charset on;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/www/site1; #你的站点路径
charset on;
}
#将客户端的请求转交给fastcgi
location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass 127.0.0.1:9000;
include /usr/local/nginx/conf/fastcgi_params;
}
#网站的图片较多,更改较少,将它们在浏览器本地缓存15天
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 15d;
}
#网站会加载很多JS、CSS,将它们在浏览器本地缓存1天
location ~ .*\.(js|css)?$
{
expires 1d;
}
location /(WEB-INF)/ {
deny all;
}
#设定日志格式
log_format site1_access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
' "$http_user_agent" $http_x_forwarded_for';
#设定本虚拟主机的访问日志
access_log /home/www/site1/logs/nginx/access.log site1_access; #日志的路径,每个虚拟机一个,不能相同
#防止nginx做web服务的时候,多server_name的问题.点击这里查看原文
server_name_in_redirect off;
}
</pre>
/usr/local/nginx/conf/vhost/www_site2_com.conf 与www_site1_com.conf 基本一样,只需把site1替换成site2即可。
* Nginx+PHP
Nginx 只是一个http服务器,本身不能处理php。但它可以通过fastcgi调用php。
php内置了一个fastcgi server, 需要通过php-fpm来启动,这个在编译php时需要指定参数,以cgi模式编译。
所以,Nginx只要配置把php请求交给fastcgi server的部分即可,剩下的事情交给 fastcig server去做。
<pre>
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
</pre>
/usr/local/nginx/html/是Nginx默认的DocumentRoot
* 虚拟主机与IP访问共存
按"配置虚拟主机"中介绍的方式配置虚拟主机以后,会发现如果用http://<ip>:<port>/xxx的方式无法访问DocumentRoot(/usr/local/nginx/html)下的应用。
解决方法:
在/usr/local/nginx/conf/vhost/下建立一个新的配置文件 localhost.conf(可以copy其他的vhost配置文件),要改的地方如下
vim /usr/local/nginx/conf/vhost/ localhost.conf
<pre>
……
server_name localhost;
……
root /usr/local/nginx/html;
……
</pre>
如果需要支持PHP
<pre>
location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
}
……
</pre>