admin 管理员组

文章数量: 1086019


2024年2月18日发(作者:bad pool header是什么意思)

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个

IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的

站点开发的,第一个公开版本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/’, #配置文件路径,默认是conf/nginx

‘–error-log-path=/var/log/nginx/’, #错误日志路径,默认是/logs/

‘–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/’, #指定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/’, # 指定文件的路径

‘–pid-path=/var/run/’, # 指定文件的路径,默认是/logs/

‘–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

这是一篇纯粹为菜鸟谋福利的翻译教程(也是哥第一次装逼翻译)。为啥说是为菜鸟谋福利呢,因为老外写的教程通常都非常详细,每一步你需要做什么,为什么要这样做,会遇到什么问题都一一列了出来。所以,你懂的。

原文地址:

/installing-nginx-with-php5-and-mysql-support-on-debian-squeeze

Tips:如果是想从Apache上迁移到Nginx只需要先停止apache服务

/etc/init.d/apache2 stop

然后卸载之

apt-get remove apache2

再然后略过以下已安装过软件步骤即可。

1、安装MySQL5

apt-get install mysql-server mysql-client

执行后进入安装,过程中会遇到MySQL提示为root用户设置密码:

New password for the MySQL “root” user: <– yourrootsqlpassword

Repeat password for the MySQL “root” user: <– yourrootsqlpassword

2、安装Nginx

Nginx已经被包含在了Debian Squeeze软件源中,所以我们只需要直接从源中安装:

apt-get install nginx

安装完成之后启动Nginx:

/etc/init.d/nginx start

Nginx默认的根目录是/var/www。如果没有这个目录,必须创建一个(并且设置目录所有者和用户组,以确保有权访问):

mkdir /var/www

chown www-data:www-data /var/www

在浏览器里面输入你服务器的IP或者域名(例如 192.168.0.100),你会看到与下图相似的页面:

因为/var/www下面没有索引页面,所以会出现以上403拒绝访问的错误提示。

4、安装PHP5

我们可以通过FastCGI让PHP5在Nginx中运行。很幸运,Debian Squeeze软件源中已经包含了一个PHP5的FastCGI模块包,所以我们只需要像这样子安装(其中包含了一些PHP的其它模块,例如php-mysql):

apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear

php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-pspell

php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

然后打开/etc/php5/cgi/,去掉_pathinfo=1:对应行的注释(即;号):

vi /etc/php5/cgi/

[...]

; _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.

; /-pathinfo

_pathinfo=1

[...]

因为Debian Squeeze上没有一个单独的FastCGI程序包,所以我们要用lighttpd的spawn-fcgi,安装lighttpd:

apt-get install lighttpd

安装后你会看到一个错误提示,告诉你因为80端口被占用所以lighttpd无法启动:

Starting web server: lighttpd2011-02-24 01:43:18: (358)

can’t bind to port: 80 Address already in use

failed!

invoke-rc.d: initscript lighttpd, action “start” failed.

那是因为之前已经将Nginix启动,80端口被占用了。接着运行:

update-rc.d -f lighttpd remove

这样以后lighttpd就不会随开机启动了。

我们安装lighttpd只是因为要用它的spawn-gcgi(它的路径是/usr/bin/spawn-fcgi)。现在我们可以使用它了,输入以下命令:

spawn-fcgi --help

可以得到它的一些使用的相关说明。

启动一个以www-data的用户和用户组运行在9000端口上的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/

当然了,谁都不想每次开机的时候都输入这么一长串的命令来启动一个程序。所以我们让它开机就自动启动。

打开/etc/

vi /etc/

然后将以上启动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/

[...]

5、配置Nginx

Nginx的配置文件在/etc/nginx/ 中,将它打开:

vi /etc/nginx/

配置文件非常容易理解,你可以去 /NginxFullExample 和/NginxFullExample2 了解更多的内容。

首先将为worker processes添加一个数值(这一步是可选的),以及将keepalive_timeout设置为一个合量的值

[...]

worker_processes 5;

[...]

keepalive_timeout 2;

[...]

虚拟主机(vhost)被定义在server{}中。默认的虚拟主机配置文件路径是/etc/nginx/sites-available/default。我们来修改一下:

vi /etc/nginx/sites-available/default

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ .php$ {

#proxy_pass 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 ;

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这一行添加了(即默认的索引文件)。以及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:

/etc/init.d/nginx restart

然后在/var/www下创建一个PHP文件:

vi /var/www/

然后我们在浏览器中访问它(例如:192.168.0.100/)

如你所见,在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/

开发版: wget /download/

根据需要下载其中的一个

3,解压,编译,安装,以 0.8.54 版本为例,指定用户和用户组:webserver

tar -xzvf

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:,找到 文件

我的位置在:

vim /usr/local/webserver/nginx/conf/

其他安装可能会在 /etc/nginx/

文件内容如下:

#指定启动用户:

user webserver webserver;

#进程数量,nginx作者认为一个就可以,根据自己的访问量修改

worker_processes 1;

#错误日志:

error_log /var/log/nginx/;

pid /usr/local/webserver/nginx/;

events {

use epoll;

worker_connections 1024;

}

http {

include ;

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/;

location / {

root $root;

index ;

}

# 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 ;

include ;

}

#图片类资源缓存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/ 文件

内容如下:

server {

listen 80;

client_max_body_size 10M;

server_name ; #换成你的域名,多个域名用空格分割,第一个为默认

charset UTF-8;

index ;

#定义根目录

set $root /var/webroot/;

#设置站点路径

root $root;

#这里把访问不是的全部跳转到 下,实现301永久重定向。

if ($host != ''){

rewrite ^(.*)$ $1 permanent;

}

#防止目录浏览

autoindex off;

#防止.htaccess文件被请求

location ~ /.ht {

deny all;

}

error_page 404 /;

#将php类型的请求转交给fastcgi

location ~ .*.(php|php5|php4|shtml|xhtml|phtml)?$ {

fastcgi_pass 127.0.0.1:9000;

include ;

}

#图片类资源缓存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/;

#加载.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 /. / last;

}

上面的代码表示:当请求的资源不是目录也不是文件,即不存在资源的时候,重定向到

启动 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/

tar xzvf

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//from//mysql/

tar xzvf

cd mysql-5.5.8/

cmake .

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_DATADIR=/var/lib/mysql -DDEFAULT_CHARSET=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/ /etc/

生成启动脚本:

cp support-files/ /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/2/from//mirror

tar xjvf 2

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一份源目录下的 -production 到安装目录下的etc/目录下

比如我的

cp -production /usr/local/php/etc/

注意,如果你编译php时候,没有指定配置文件路径 --with-config-file-path=/usr/local/php/etc

可能会有问题,你需要找到php寻找配置文件的路径。然后把拷贝进去

安装目录下的etc/目录下会有一个t文件复制一份改名为

cd /usr/local/php/etc/ # 切换到安装目录下的配置文件目录

cp t

修改 启用如下几行,即去掉前面的分号(;)

pid = run/

error_log = log/

log_level = notice

listen = 127.0.0.1:9000

d_clients = 127.0.0.1

= webserver

= webserver

= 0666

user = webserver

group = webserver

pm = dynamic

_children = 50

_servers = 5

_spare_servers = 5

_spare_servers = 35

_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_PID=${prefix}/var/run/

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

;;

stop)

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

else

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 确定


本文标签: 安装 文件 路径 目录 默认