用Debian类安装Nginx详细配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个
IMAP/POP3/SMTP 代理服务器。
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
2011年6月1日,nginx 1.0.4发布。
如果大家使用Debian或它的衍生版本的系统,可以使用sudo apt-get install nginx去安装并使用nginx.
在这种情况下,默认所安装的configure选项如下:
‘–conf-path=/etc/nginx/nginx.conf’, #配置文件路径,默认是conf/nginx
‘–error-log-path=/var/log/nginx/error.log’, #错误日志路径,默认是
/logs/error.log
‘–http-client-body-temp-path=/var/lib/nginx/body’, #指定http客户端请求缓存文件存放目录的路径
‘–http-fastcgi-temp-path=/var/lib/nginx/fastcgi’, #指定http FastCGI缓存文件存放目录的路径
‘–http-log-path=/var/log/nginx/access.log’, #指定http默认访问日志的路径
‘–http-proxy-temp-path=/var/lib/nginx/proxy’, #指定http反向代理缓存文件存放目录
‘–http-scgi-temp-path=/var/lib/nginx/scgi’, #指定http sigi缓存文件存放目录的路径
‘–http-uwsgi-temp-path=/var/lib/nginx/uwsgi’, #指定http uwsgi缓存文件存放目录的路径
‘–lock-path=/var/lock/nginx.lock’, # 指定nginx.lock文件的路径
‘–pid-path=/var/run/nginx.pid’, # 指定nginx.pid文件的路径,默认是
/logs/nginx.pid
‘–with-debug’, #启用调试日志
‘–with-http_addition_module’, #启用http_addition_module
‘–with-http_dav_module’, #启用http_dav_module
‘–with-http_geoip_module’,
‘–with-http_gzip_static_module’,
‘–with-http_image_filter_module’,
‘–with-http_realip_module’,
‘–with-http_stub_status_module’,
‘–with-http_ssl_module’,
‘–with-http_sub_module’,
‘–with-http_xslt_module’,
‘–with-ipv6′,
‘–with-sha1=/usr/include/openssl’,
‘–with-md5=/usr/include/openssl’,
‘–with-mail’,
‘–with-mail_ssl_module’,
‘–add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair’
安装完成后Nginx所使用的目录如下
/usr/sbin/nginx
/usr/share/nginx
/usr/share/doc/nginx
/etc/nginx
/etc/init.d/nginx
/etc/default/nginx
/etc/logrotate.d/nginx
/etc/ufw/applications.d/nginx
/var/lib/nginx
/var/lib/update-rc.d/nginx
/var/log/nginx
网站文件可以放就在 /usr/share/nginx/www下.
在Debian Squeeze上安装Nginx+PHP5+MySQL
这是一篇纯粹为菜鸟谋福利的翻译教程(也是哥第一次装逼翻译)。
为啥说是为菜鸟谋福利呢,因为老外写的教程通常都非常详细,每一步你需要做什么,为什么要这样做,会遇到什么问题都一一列了出来。
所以,你懂的。
原文地址:
然后卸载之
再然后略过以下已安装过软件步骤即可。
1、安装MySQL5
执行后进入安装,过程中会遇到MySQL提示为root用户设置密码:
New password for the MySQL “root” user: <– yourrootsqlpassword Repeat password for the MySQL “root” user: <– yourrootsqlpassword
2、安装Nginx
Nginx已经被包含在了Debian Squeeze软件源中,所以我们只需要直接从源中安装:
安装完成之后启动Nginx:
Nginx默认的根目录是/var/www。
如果没有这个目录,必须创建一个(并且设置目录所有者和用户组,以确保有权访问):
在浏览器里面输入你服务器的IP或者域名(例如 http://192.168.0.100),你会看到与下图相似的页面:
因为/var/www下面没有索引页面,所以会出现以上403拒绝访问的错误提示。
4、安装PHP5
我们可以通过FastCGI让PHP5在Nginx中运行。
很幸运,Debian Squeeze 软件源中已经包含了一个PHP5的FastCGI模块包,所以我们只需要像这样子安装(其中包含了一些PHP的其它模块,例如php-mysql):
然后打开/etc/php5/cgi/php.ini,去掉cgi.fix_pathinfo=1:对应行的注释(即;号):
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP’s
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.
A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; /cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]
因为Debian Squeeze上没有一个单独的FastCGI程序包,所以我们要用lighttpd的spawn-fcgi,安装lighttpd:
apt-get install lighttpd
安装后你会看到一个错误提示,告诉你因为80端口被占用所以lighttpd无法启动:
Starting web server: lighttpd2011-02-24 01:43:18: (network.c.358) can’t bind to port: 80 Address already in use
failed!
invoke-rc.d: initscript lighttpd, action “start” failed.
那是因为之前已经将Nginix启动,80端口被占用了。
接着运行:
这样以后lighttpd就不会随开机启动了。
我们安装lighttpd只是因为要用它的spawn-gcgi(它的路径是
/usr/bin/spawn-fcgi)。
现在我们可以使用它了,输入以下命令:
可以得到它的一些使用的相关说明。
启动一个以www-data的用户和用户组运行在9000端口上的PHP FastCGI后台程序,我们可以输入以下命令:
当然了,谁都不想每次开机的时候都输入这么一长串的命令来启动一个程序。
所以我们让它开机就自动启动。
打开/etc/rc.local
然后将以上启动PHP FastCGI的命令粘贴到文件末尾
[...]
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
[...]
5、配置Nginx
Nginx的配置文件在/etc/nginx/nginx.conf 中,将它打开:
配置文件非常容易理解,你可以
去/NginxFullExample和
/NginxFullExample2了解更多的内容。
首先将为worker processes添加一个数值(这一步是可选的),以及将keepalive_timeout设置为一个合量的值
[...]
worker_processes 5;
[...]
keepalive_timeout 2;
[...]
虚拟主机(vhost)被定义在server{}中。
默认的虚拟主机配置文件路径是/etc/nginx/sites-available/default。
我们来修改一下:
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}
[...]
server_name _; 是指包含所有的虚拟主机(当然你也可以为它设置一个域名,例如)。
在location /这部分当中,我在index这一行添加了index.php(即默认的索引文件)。
以及root /var/www。
意思是将/var/www设置为根目录。
最重要的是PHP相关的设置location ~ \.php$ {}。
去掉这一部分的注释(即#号)来开启它。
确认将fastcgi_param这一行修改成fastcgi_param SCRIPT_FILENAME
/var/www$fastcgi_script_name;(将/var/www替换成你自己设置的网站根目录)。
确认include和fastcgi_params;之间有几个空格。
默认的配置文件中他们连在了一块,这是一个BUG。
好了,现在我们保存文件,并重启Nginx:
然后在/var/www下创建一个PHP文件:
<?php phpinfo();
然后我们在浏览器中访问它(例如:http://192.168.0.100/info.php)
如你所见,在Server API一栏中显示PHP5是在FastCGI下运行的,另外下面的栏目中还会显示一些已经打开的PHP模块,包括MySQL模块。
CentOS / Debian 编译安装Nginx + Mysql 5.5.8 + PHP 5.3.5
CentOS / Debian 编译安装Nginx + Mysql 5.5.8 + PHP 5.3.5
整整花了我2天时间彻底弄好了Nginx和Mysql+PHP的安装
测试环境:CentOS 5.4 X86 ,Debian 5.0.6 (lenny)
CentOS上测试了Nginx的最新稳定版( Stable ):0.8.54
Debian上测试了Nginx的最新开发版( Development ):0.9.3
Mysql-server 安装的最新版本:5.5.8
如果你用的版本和我的不一样,请不要参考,可能会给你带来麻烦
安装Nginx,
1,添加webserver 用户用来执行nginx,如果你已经存在www或www-data等用户,掠过此步 useradd -M -r --shell /sbin/nologin --home-dir /usr/local/webserver webserver
2,下载Nginx安装包:
稳定版: wget /download/nginx-0.8.54.tar.gz
开发版: wget /download/nginx-0.9.3.tar.gz
根据需要下载其中的一个
3,解压,编译,安装,以0.8.54 版本为例,指定用户和用户组:webserver tar -xzvf nginx-0.8.54.tar.gz
cd nginx-0.8.54/
./configure \
--prefix=/usr/local/webserver/nginx \
--user=webserver \
--group=webserver \
--with-http_stub_status_module \
--with-http_ssl_module
make
make install
nginx安装完毕。
4,配置默认nginx:,找到nginx.conf文件
我的位置在:
vim /usr/local/webserver/nginx/conf/nginx.conf
其他安装可能会在/etc/nginx/nginx.conf
文件内容如下:
#指定启动用户:
user webserver webserver;
#进程数量,nginx作者认为一个就可以,根据自己的访问量修改worker_processes 1;
#错误日志:
error_log /var/log/nginx/error.default.log;
pid /usr/local/webserver/nginx/nginx.pid;
events {
use epoll;
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;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
server {
listen 80;
server_name localhost;
set $root /var/www;
root $root;
access_log /var/log/nginx/access.localhost.log;
location / {
root $root;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#图片类资源缓存5天,并且不记录请求日志
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
{
expires 5d;
access_log off;
}
#css/js 缓存一天,不记录请求日志
location ~ .*\.(js|css)?$
{
expires 1d;
access_log off;
}
#防止access文件被下载
location ~ /\.ht {
deny all;
}
}
#引入虚拟主机文件:
include /usr/local/webserver/nginx/sites/*.conf;
}
这样配置后,需要新增加虚拟主机的直接在nginx/sites/目录下,添加配置文件即可
如:现在有 域名
建立:/usr/local/webserver/nginx/sites/.conf 文件
内容如下:
server {
listen 80;
client_max_body_size 10M;
server_name ; #换成你的域名,多个域名用空格分割,第一个为默认
charset UTF-8;
index index.html index.htm index.php;
#定义根目录
set $root /var/webroot/;
#设置站点路径
root $root;
#这里把访问不是的全部跳转到下,实现301永久重定向。
if ($host != ''){
rewrite ^(.*)$ $1 permanent;
}
#防止目录浏览
autoindex off;
#防止.htaccess文件被请求
location ~ /\.ht {
deny all;
}
error_page 404 /404.html;
#将php类型的请求转交给fastcgi
location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}
#图片类资源缓存5天,并且不记录请求日志
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
{
expires 5d;
access_log off;
}
#css/js 缓存一天,不记录请求日志
location ~ .*\.(js|css)?$
{
expires 1d;
access_log off;
}
#访问日志:
access_log /var/log/nginx/.log;
#加载.htaccess重写文件,注意,这里不支持变量路径
#不能写成include $root//.htaccess;
include /var/webroot//.htaccess;
#开启域名跳转,则当访问出错后,其他域名会自动跳转到
#注意,这里我说的是,仅仅当访问出错后,才会跳转,所以,这里并不能实现301重定向!
server_name_in_redirect on;
}
apache的.htaccess重写规则到Nginx的改写:
/convert-apache-htaccess-to-nginx/
附上wordpress的nginx的.htaccess文件:
if (!-e $request_filename){
rewrite /. /index.php last;
}
上面的代码表示:当请求的资源不是目录也不是文件,即不存在资源的时候,重定向到index.php
启动nginx /etc/init.d/nginx start
安装Mysql 5.5.8
Mysql 5.5.8需要cmake编译工具,所以需要先安装cmake
自动安装
CentOS : yum install cmake
Debian : sudo apt-get install cmake
编译安装
下载: wget /files/v2.8/cmake-2.8.3.tar.gz
tar xzvf cmake-2.8.3.tar.gz
cd cmake-2.8.3/
然后运行:
./configure
make
make install
或者:
./bootstrap
gmake
gmake install
安装完cmake 后,编译mysql
1,添加mysql用户,如果之前安装过mysql已经存在mysql用户,掠过此步
useradd -M -r --shell /sbin/nologin --home-dir /usr/local/mysql mysql
2,下载mysql 5.5.8 ,编译安装,我安装的目录在:/usr/local/mysql 数据库存放在/var/lib/mysql 下
wget
/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/ /mysql/
tar xzvf mysql-5.5.8.tar.gz
cd mysql-5.5.8/
cmake .
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_DATADIR=/var/lib/mysql -DDEFAULT_C HARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1
-DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1
make
make install
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql
安装默认数据库
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
登录修改密码:mysql -u root -h localhost,默认密码为空,直接按回车进入。
update user set password=PASSWORD('123456') where user='root';
复制mysql配置文件:
cp ./support-files/f /etc/f
生成启动脚本:
cp support-files/mysql.server /etc/init.d/mysqld
启动mysql
./bin/mysqld_safe --user=mysql &
安装PHP5.3.5 最新版本
注意:PHP5.3.5版本中内置了php-fpm ,编译时开启,并且编译后不存在php-cgi 文件了,使用php-fpm 解析php fastcgi请求。
1,下载:
wget /get/php-5.3.5.tar.bz2/from//mirror
tar xjvf php-5.3.5.tar.bz2
cd php-5.3.5
执行:
./buildconf --force
如果报错,可能是你的autoconf不是2.13 版本的,PHP5.3.5的bug,需要安装autoconf为2.13不版本:
CentOS :# yum install autoconf213
Debian :# apt-get install autoconf2.13
设置环境变量
CentOS :export PHP_AUTOCONF="/usr/bin/autoconf-2.13"
Debian :export PHP_AUTOCONF="/usr/bin/autoconf2.13"
再次运行:./buildconf --force ,出现Forcing buildconf ,则运行成功。
我的php安装在/usr/local/php 目录下,这也是默认安装位置,指定用户和用户组:webserver ./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/conf.d \
--enable-fpm \
--with-fpm-user=webserver \
--with-fpm-group=webserver \
--with-curl \
--with-pear \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-xpm-dir \
--with-freetype-dir \
--with-mcrypt \
--with-mhash \
--with-mysql \
--with-mysqli \
--with-pdo-mysql \
--with-openssl \
--with-xmlrpc \
--with-xsl \
--with-bz2 \
--with-gettext \
--disable-debug \
--enable-fpm \
--enable-exif \
--enable-wddx \
--enable-zip \
--enable-bcmath \
--enable-calendar \
--enable-ftp \
--enable-mbstring \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-shmop \
--enable-dba \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg
运行可能报错:我遇到xsl和mcrypt两个库报错,重新安装一下xsl的dev包就可以:
CentOS :yum install libxslt-devel libmcrypt-devel
Debian : apt-get install libxslt1-dev libmcrypt-dev
如果你有其他的库不满足,搜索一下该库,安装一下即可,这一步应该没有太多问题。
编译:
make
我在Debian下make正常,但在CentOS下却提示make错误,
make: *** [sapi/fpm/php-fpm] Error 1 错误中出现libiconv,应该是iconv包问题,
使用下面的命令替换即可:
make ZEND_EXTRA_LIBS='-liconv'
完成后:
make test
make install
安装完成后,cp一份源目录下的php.ini-production 到安装目录下的etc/目录下
比如我的
cp php.ini-production /usr/local/php/etc/
注意,如果你编译php时候,没有指定配置文件路径--with-config-file-path=/usr/local/php/etc
可能会有问题,你需要找到php寻找配置文件的路径。
然后把php.ini拷贝进去
安装目录下的etc/目录下会有一个php-fpm.conf.default文件复制一份改名为php-fpm.conf
cd /usr/local/php/etc/ # 切换到安装目录下的配置文件目录
cp php-fpm.conf.default php-fpm.conf
修改php-fpm.conf 启用如下几行,即去掉前面的分号(;)
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
listen.owner = webserver
listen.group = webserver
listen.mode = 0666
user = webserver
group = webserver
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
如果你的路径为默认安装路径:/usr/local/php
则安装完成后会生成/etc/init.d/php-fpm 启动脚本,并且这个脚本还是错的!
如果不是,则不会生成php-fpm启动脚本,不管有没有生成,自己创建,如果有的,清空原脚本 vim /etc/init.d/php-fpm
内容如下:
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-exit"
exit 1
else
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac
现在应该可以启动php-fpm了:以root权限运行:
/etc/init.d/php-fpm start
重新启动一下nginx
/etc/init.d/nginx restart
设置开机启动:
CentOS :
chkconfig --add mysqld
chkconfig --add nginx
chkconfig --add php-fpm
chkconfig --level 2345 mysqld on
chkconfig --level 2345 nginx on
chkconfig --level 2345 php-fpm on Debian :
sudo rcconf
选择mysqld nginx php-fpm 确定。