您的当前位置:首页正文

Nginx+FastCGI配置

2022-08-18 来源:好走旅游网
Nginx+FastCGI配置

1.1 nginx概述nginx简介

Nginx是俄罗斯⼈编写的⼗分轻量级的HTTP服务器,Nginx,它的发⾳为“engine X”, 是⼀个⾼性能的HTTP和反向代理服务器,同时也是⼀个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯⼈ Igor Sysoev为俄罗斯访问量第⼆的 Rambler.ru站点开发的,它已经在该站点运⾏超过两年半了。Igor Sysoev在建⽴的项⽬时,使⽤基于BSD许可。

在⾼并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使⽤。

1.2 nginx安装准备 1.2.1 nginx环境准备

1.系统要求:Linux 2.6+ 内核,本⽂中的Linux操作系统为redhat AS 5.3。2.获取程序并安装

RedHat等其他Linux发⾏版可从安装光盘中找到这些程序库的RPM包RedHat可以直接利⽤CentOS的RPM包安装。可以⽤rpm安装以下包,如有关联包,安装时⼀起安装。

gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-develglib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-developenssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers以上包如果安装了的话,不需要再安装了。

4.其它准备⼯作

如果采⽤半RPM安装的话,PHP的⼀些⽀持包,之前应该事先安装好,全部采⽤tar包安装的话,中间出现问题的可能性⽐较⼤。所以应事先安装好dg库的⽀持包,也可以采⽤tar安装。

1.2.2 nginx软件包准备

Nginx所需要的软件包可以从下⾯位置获取,也可以记住名字在google中搜索。nginx-0.7.61.tar.gzphp-5.2.10.tar.gz

php-5.2.10-fpm-0.5.11.diff.gzmysql-5.1.35.tar.gzlibiconv-1.13.tar.gzlibmcrypt-2.5.8.tar.gzmcrypt-2.6.8.tar.gzmemcache-2.2.5.tgzmhash-0.9.9.9.tar.gzpcre-7.9.tar.gz

eaccelerator-0.9.5.3.tar.bz2PDO_MYSQL-1.0.2.tgzImageMagick.tar.gzimagick-2.2.2.tgz

1.3 FastCGI安装

Fastcgi可以安装到其它的电脑上,可以实现分步式处理,需要修改相关配置⽂件来实现,本章内容讲的是⼀台电脑上实现所有功能。1.3.1 PHP⽀持环境准备

编译安装PHP 5.2.10所需的⽀持库:1.安装libiconv

对⽂本进⾏编码间的转换,⽤它来处理中⽂各种编码之间的转换。#tar zxvf libiconv-1.13.tar.gz#cd libiconv-1.13/

#./configure --prefix=/usr/local#make

#make installcd ../

2.安装libmcrypt 实现加密功能的库。# tar zxvf libmcrypt-2.5.8.tar.gz # cd libmcrypt-2.5.8/# ./configure# make

# make install# /sbin/ldconfig

# 注:这⾥不要退出去了。# cd libltdl/

# ./configure --enable-ltdl-install# make

# make install# cd ../../

3. 安装mhash(哈稀函数库)# tar zxvf mhash-0.9.9.9.tar.gz# cd mhash-0.9.9.9/# ./configure# make

# make install# cd ../

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.laln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.soln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.aln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.laln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.soln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.14. 安装mcrypt

# tar zxvf mcrypt-2.6.8.tar.gz# cd mcrypt-2.6.8/# /sbin/ldconfig#./configure# make

# make install# cd ../

注:DG库所需要安装包,可以采⽤rpm包来安装,减少时间,由于php已经集成GD库,但前提⽀持包应事先安装,如zlib,png,jpeg,freetype等。如果完全想采⽤tar包安装的话,请参考lamp相关内容。1.3.2 MySql环境准备

建⽴mysql组,建⽴mysql⽤户并且加⼊到mysql组中# groupadd mysql

# useradd mysql -g mysql

# tar zxvf mysql-5.1.24-rc.tar.gz# cd mysql-5.1.24-rc

# ./configure --prefix=/usr/local/mysql--without-debug

--with-extra-charsets=gbk--with-extra-charsets=all --enable-assembler --with-pthread

--enable-thread-safe-client

--with-mysqld-ldflags=-all-static /*不带共享库的形式编译mysqld*/--with-client-ldflags=-all-static--with-big-tables

--with-readline /*要采⽤rpm⽅式安装ncurses或tar包安装*/--with-ssl /*要采⽤rpm⽅式安装openssl*/--with-embedded-server --enable-local-infile --with-plugins=innobase# make && make install

# /usr/local/mysql/bin/mysql_install_db --user=mysql #以mysql⾝份初始化数据库

# cp ./support-files/mysql.server /etc/init.d/mysql #复制Mysql启动服务⾄系统

# cp ./support-files/my-medium.cnf /etc/my.cnf# chmod 755 /etc/init.d/mysql

# cd /usr/local/mysql/ #切换到cd /usr/local/mysql/⽬录下# chown -R root . #改变当前⽬录下的所有者为mysql⽤户# chown -R mysql var #修改数据库⽬录的权限

# chgrp -R mysql . #改变当前⽬录下的mysql⽤户的⽂件为mysql组# /usr/local/mysql/bin/mysqld_safe --user=mysql&

# /usr/local/mysql/bin/mysqladmin -u root password 'admin' #设置管理员密码# /usr/local/mysql/bin/mysql -u root -p #测试密码输⼊Enter password:

Welcome to the MySQL monitor. Commands end with ; or \\g.Your MySQL connection id is 6

Server version: 5.1.36-log Source distributionType 'help;' or '\\h' for help.mysql> \\q /*退出mysql*/

# chkconfig --add mysql #添加mysqld服务到系统# chkconfig mysql on #打开myslqd服务# service mysql start #启动Mysql

#/usr/local/mysql/bin/mysqladmin shutdown #关闭数据库

#查看mysql端⼝的打开情况# netstat -tunlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/P name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2936/ #查看是否启动:#ps -ef | grep mysql

注:在配置过程中,整体的配置思路从上往下,其中的⼀些功能可以⽤在实际的配置过程中,主要⽤于测试环节中。Mysql的优化部分这⾥没有给出,需要参考其它资料。

1.3.3 PHP安装⽀持FastCGI模式1.编译安装PHP(FastCGI模式)# tar zxvf php-5.2.10.tar.gz

# gzip -cd php-5.2.10-fpm-0.5.11.diff.gz | patch -d php-5.2.10 -p1# cd php-5.2.10/

# ./configure --prefix=/usr/local/php

--with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql

--with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-gd

--enable-gd-native-ttf --with-libxml-dir=/usr --enable-xml --disable-rpath

--enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem

--enable-inline-optimization --with-curl

--with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm

--enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap

--with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear

#注:make的时候⼀定要加上后⾯的参数,才能成功。# make ZEND_EXTRA_LIBS='-liconv'

# make install

# cp php.ini-dist /usr/local/php/etc/php.ini# cd ../

注:在安装过程中采⽤了tar包与rpm混合安装的情况,对于库的指定确实出现了很⼤的⿇烦。如果采⽤rpm安装的话,不需要指定⽀持包的位置就可以了,tar安装的话,需要指定安装位置。

1.3.4编译安装PHP5扩展模块1.安装memcache

# tar zxvf memcache-2.2.5.tgz# cd memcache-2.2.5/# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config# make

# make install

# 说明:memcache库的位置Installing shared extensions:

/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ..

2.安装eaccelerator php加速

# tar jxvf eaccelerator-0.9.5.3.tar.bz2# cd eaccelerator-0.9.5.3/# /usr/local/php/bin/phpize

# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config# make

# make install

Installing shared extensions:

/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../

3.安装PDO_MYSQL(数据库连接的⽀持)# tar zxvf PDO_MYSQL-1.0.2.tgz# cd PDO_MYSQL-1.0.2/# /usr/local/php/bin/phpize

#./configure --with-php-config=/usr/local/php/bin/php-config--with-pdo-mysql=/usr/local/mysql# make

# make install

Installing shared extensions:

/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../

4.安装ImageMagick是Linux下⾮常强⼤的图象处理函数与GD类似.# tar zxvf ImageMagick.tar.gz# cd ImageMagick-6.5.1-2/#./configure# make

# make install# cd ../

5.安装imagick(连接PHP和ImageMagick的通道)# tar zxvf imagick-2.2.2.tgz# cd imagick-2.2.2/

# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config# make

# make install

Installing shared extensions:

/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../

6.修改php.ini⽂件,已使php⽀持扩展的功能vi /usr/local/php/etc/php.ini查找

extension_dir = \"./\"修改为

extension_dir=\"/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/\"并在此⾏后增加以下⼏⾏,然后保存:

extension = \"memcache.so\"extension = \"pdo_mysql.so\"extension = \"imagick.so\"再查找output_buffering = Off修改为output_buffering = On

7.配置eAccelerator加速PHP:

mkdir -p /usr/local/eaccelerator_cachevi /usr/local/php/etc/php.ini

到配置⽂件的最末尾,粘上以下内容:[eaccelerator]

zend_extension=\"/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so\"eaccelerator.shm_size=\"64\"

eaccelerator.cache_dir=\"/usr/local/eaccelerator_cache\"eaccelerator.enable=\"1\"eaccelerator.optimizer=\"1\"eaccelerator.check_mtime=\"1\"eaccelerator.debug=\"0\"eaccelerator.filter=\"\"

eaccelerator.shm_max=\"0\"eaccelerator.shm_ttl=\"3600\"

eaccelerator.shm_prune_period=\"3600\"eaccelerator.shm_only=\"0\"eaccelerator.compress=\"1\"

eaccelerator.compress_level=\"9\"

1.3.5 PHP-fpm配置

1. 创建php-fpm配置⽂件

php-fpm是为PHP打的⼀个FastCGI管理补丁,可以平滑变更php.ini配置⽽⽆需重启php-cgi:在/usr/local/php/etc/⽬录中创建php-fpm.conf⽂件,也可以在原有的基础上进⾏修改。如果您安装 Nginx + PHP ⽤于程序调试请将以下的

0改为

1,以便显⽰PHP错误信息,否则,Nginx 会报状态为500的空⽩错误页。说明:创建www⽤户与组,这⾥创建了下⾯就不⽤创建了。#/usr/sbin/groupadd www -g 48

#/usr/sbin/useradd -u 48 -g www www

rm -f /usr/local/php/etc/php-fpm.confvi /usr/local/php/etc/php-fpm.conf

################################输⼊或者是修改为以下内容:

###############################

/usr/local/php/logs/php-fpm.pid /usr/local/php/logs/php-fpm.log notice

10 1m 5s yes

default

127.0.0.1:9000

-1

0666

/usr/sbin/sendmail -t -i

1

www www

static

128

20 5 35

0s 0s logs/slow.log 51200 0

yes 500

127.0.0.1

$HOSTNAME /usr/local/bin:/usr/bin:/bin /tmp /tmp /tmp

$OSTYPE

$MACHTYPE 2

2.php-fpm启动与管理

/usr/local/php/sbin/php-fpm start

注:/usr/local/php/sbin/php-fpm还有其他参数,包括:

start|stop|quit|restart|reload|logrotate,修改php.ini后不重启php-cgi,重新加载配置⽂件使⽤reload,就保持了在php的fastcgi进程持续运⾏的状态下,⼜重新加载了php.ini。

1.4 Nginx安装 1.4.1 nginx安装

Nginx只是web服务器,配合php技术实现的fastcgi来提⾼性能。1、安装rewrite模块⽀持包pcre库:# tar zxvf pcre-7.8.tar.gz# cd pcre-7.8/# ./configure

# make && make installcd ../

2、安装Nginx

说明:创建www⽤户组及www⽤户,如果之前php-fpm没有创建,这⾥要创建。# /usr/sbin/groupadd www

# /usr/sbin/useradd -g www www

# tar zxvf nginx-0.7.59.tar.gz# cd nginx-0.7.59/

#./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module nginx path prefix: \"/usr/local/nginx\"

nginx binary file: \"/usr/local/nginx/sbin/nginx\" nginx configuration prefix: \"/usr/local/nginx/conf\"

nginx configuration file: \"/usr/local/nginx/conf/nginx.conf\" nginx pid file: \"/usr/local/nginx/logs/nginx.pid\" nginx error log file: \"/usr/local/nginx/logs/error.log\"

nginx http access log file: \"/usr/local/nginx/logs/access.log\"

nginx http client request body temporary files: \"client_body_temp\" nginx http proxy temporary files: \"proxy_temp\" nginx http fastcgi temporary files: \"fastcgi_temp\"# make && make install# cd ../

3.Nginx 安装后只有⼀个程序⽂件,本⾝并不提供各种管理程序,它是使⽤参数和系统信号机制对 Nginx 进程本⾝进⾏控制的。 Nginx 的参数包括有如下⼏个:

-c :使⽤指定的配置⽂件⽽不是 conf ⽬录下的 nginx.conf 。

-t:测试配置⽂件是否正确,在运⾏时需要重新加载配置的时候,此命令⾮常重要,⽤来检测所修改的配置⽂件是否有语法错误。-v:显⽰ nginx 版本号。

-V:显⽰ nginx 的版本号以及编译环境信息以及编译时的参数。

例如我们要测试某个配置⽂件是否书写正确,我们可以使⽤以下命令sbin/nginx -t -c conf/nginx.conf

1.4.2 nginx配置

1.在/usr/local/nginx/conf/⽬录中创建nginx.conf⽂件:rm -f /usr/local/nginx/conf/nginx.confvi /usr/local/nginx/conf/nginx.conf

=======================================nginx.conf才是nginx web服务器的配置⽂件

=======================================user www www; /*启动nginx服务的⽤户与组*/worker_processes 8; /*启动nginx服务的⼯作进程*/

error_log logs/nginx_error.log crit; /*错误⽇志,以及等级*/pid /usr/local/nginx/nginx.pid; /*nginx服务进程PID*/worker_rlimit_nofile 51200;

events {

use epoll; /*⼯作模式*/

worker_connections 51200; /*每进程允许最⼤的同时连接数*/}

http {

include mime.types;

default_type application/octet-stream; #charset gb2312;

server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k;

sendfile on;

tcp_nopush on; keepalive_timeout 60; tcp_nodelay on;

fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k;

gzip on;

gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;

server {

listen 80; /*监听端⼝*/

server_name localhost; /*服务器名称*/

index index.html index.htm index.php; /*缺省主页名称*/

root /usr/local/nginx/html; /*⽹站根⽬录,也可以采⽤下⾯内容*/#也可以采⽤相对路径,下⾯注释部分*/ #location / {

# root html;

# index index.html index.htm; # }

#limit_conn crawler 20;

#通过FastCGI⽅式⽀持PHP,php页⾯由fastcgi代理处理,这也是反向代理的⼀个应⽤,这⾥可以是jsp/asp等脚本。 location ~ .*\\.(php|php5)?$ {

#fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_pass 127.0.0.1:9000; /*fastcgi监听端⼝*/ fastcgi_index index.php;

include fcgi.conf; /*fastcgi配置⽂件,修改为以下内容*/ }

#对于某⼀类型的⽂件,设置过期时间,静态的页⾯通常设置长⼀点。 #静态⽂件,nginx⾃⼰处理

location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {

expires 30d; }

#⽇志的格式

log_format access '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" $http_x_forwarded_for'; access_log logs/access.log access; }}

说明:以上配置⽂件只是基本配置⽂件,要实现其它功能的话,需要在此基础上进⾏修改。2.在/usr/local/nginx/conf/⽬录中创建fcgi.conf⽂件:说明:可以直接粘贴以下内容。vi /usr/local/nginx/conf/fcgi.conf

fastcgi_param GATEWAY_INTERFACE CGI/1.1;fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;fastcgi_param CONTENT_TYPE $content_type;fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param SCRIPT_NAME $fastcgi_script_name;fastcgi_param REQUEST_URI $request_uri;fastcgi_param DOCUMENT_URI $document_uri;fastcgi_param DOCUMENT_ROOT $document_root;fastcgi_param SERVER_PROTOCOL $server_protocol;fastcgi_param REMOTE_ADDR $remote_addr;fastcgi_param REMOTE_PORT $remote_port;fastcgi_param SERVER_ADDR $server_addr;fastcgi_param SERVER_PORT $server_port;fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirectfastcgi_param REDIRECT_STATUS 200;1.4.3 nginx启动与管理1.启动nginx

/usr/local/nginx/sbin/nginx

2.测试nginx配置⽂件

修改/usr/local/nginx/conf/nginx.conf配置⽂件后,请执⾏以下命令检查配置⽂件是否正确:# /usr/local/nginx/sbin/nginx -t

如果屏幕显⽰以下两⾏信息,说明配置⽂件正确:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully3.查看Nginx主进程号

ps -ef | grep \"nginx: master process\" | grep -v \"grep\" | awk -F ' ' '{print $2}'屏幕显⽰的即为Nginx主进程号,例如:6302

这时,执⾏以下命令即可使修改过的Nginx配置⽂件⽣效:kill -HUP 6302

或者⽆需这么⿇烦,找到Nginx的Pid⽂件:kill -HUP `cat /usr/local/nginx/logs/nginx.pid`4.配置开机⾃动启动Nginx + PHPvi /etc/rc.local加⼊以下内容:ulimit -SHn 51200

/usr/local/php/sbin/php-fpm start/usr/local/nginx/sbin/nginx

1.4.4 nginx配置总结

nginx对我来说是⼀个新的内容,安装的包⽐较多,在经过了⼀段时间对nginx的了解之后,才真正的配置成功,本⽂只是实现了⼀个最基本的功能,对于nginx⾼性能的使⽤在配置⽂件中没有实现。在以后的学习过程中还需要更深⼊的去了解,⽐如:反向代理,以及nginx+fastcgi分步式的环境配置。

1.5 Nginx基本配置管理1.5.1 nginx配置基础1、正则表达式匹配 ~ 区分⼤⼩写匹配 ~* 不区分⼤⼩写匹配

!~和!~*分别为区分⼤⼩写不匹配及不区分⼤⼩写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配

\\ 转义字符。可以转. * ?等 * 代表任意字符

2、⽂件及⽬录匹配

-f和!-f⽤来判断是否存在⽂件 -d和!-d⽤来判断是否存在⽬录

-e和!-e⽤来判断是否存在⽂件或⽬录 -x和!-x⽤来判断⽂件是否可执⾏例:

location = /

#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配location ^~ /images/ {

# 匹配任何已/images/开头的任何查询并且停⽌搜索。任何正则表达式将不会被测试。location ~* \\.(gif|jpg|jpeg)$ {

# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求3、⼀些可⽤的全局变量$args

$content_length$content_type$document_root$document_uri$host

$http_user_agent$http_cookie$limit_rate

$request_body_file$request_method$remote_addr$remote_port$remote_user

$request_filename$request_uri

$query_string$scheme

$server_protocol$server_addr$server_name$server_port$uri

1.5.2 nginx切割⽇志

1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh,输⼊以下内容:#!/bin/bash

# This script run at 00:00

# The Nginx logs path

logs_path=\"/usr/local/nginx/logs/\"

mkdir -p ${logs_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/

mv ${logs_path}access.log ${logs_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/access_$(date -d \"yesterday\"+\"%Y%m%d\").log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

2、设置crontab,每天凌晨00:00切割nginx访问⽇志crontab -e

输⼊以下内容:

00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh1.5.3 nginx状态监控

在nginx.conf根⽬录下加⼊以下内容,过程如下:1.修改配置⽂件

vi /usr/local/nginx/conf/nginx.conf #以下⾯加⼊以下内容location /NginxStatus { stub_status on; access_log on;

auth_basic \"NginxStatus\";}

2.重启nginx服务

(1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动

1.5.4 nginx⽬录浏览

在nginx.conf根⽬录下加⼊以下内容,过程如下:1.修改配置⽂件

vi /usr/local/nginx/conf/nginx.conf #以下⾯加⼊以下内容

#⾥⾯有要这⼀句就可以了,其它可以注释#注:与 { 要有空格,否则会出错location / {autoindex on;}

2.重启nginx服务

(1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动

1.5.5 nginx禁⽌访问某类⽂件

在nginx.conf根⽬录下加⼊以下内容,过程如下:修改配置⽂件如下

vi /usr/local/nginx/conf/nginx.conf#以下⾯加⼊以下内容

#⾥⾯有要这⼀句就可以了,其它可以注释#注:与 { 要有空格,否则会出错⽅法⼀:

location ~* \\.(txt|doc)$ {if (-f $request_filename) {root /usr/local/nginx/html/test;break;}}

⽅法⼆

location ~* \\.(txt|doc)$ {

root /usr/local/nginx/html/test;deny all;}

说明:⽤正则表达式进⾏匹配,来执⾏相应的处理。1.5.6 nginx静态⽂件处理

第⼀种⽅法:根据⽂件类型expires

location ~* \\.(js|css|jpg|jpeg|gif|png|swf)$ {if (-f $request_filename) {root /usr/local/nginx/html/;expires 1d;}

break;}

第⼆种⽅法:根据判断某个⽬录

location ~ ^/(images|javascript|js|css|flash|media|static)/ {root /usr/local/nginx/html/;expires 30d;}

⽰例2:

反向代理负载均衡的应⽤架构

#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。据说nginx可以根据后台响应时间调整。后台需要多个web服务器。nginx的upstream⽬前⽀持4种⽅式的分配1)、轮询(默认)

每个请求按时间顺序逐⼀分配到不同的后端服务器,如果后端服务器down掉,能⾃动剔除。2)、weight

指定轮询⼏率,weight和访问⽐率成正⽐,⽤于后端服务器性能不均的情况。2)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问⼀个后端服务器,可以解决session的问题。3)、fair(第三⽅)

按后端服务器的响应时间来分配请求,响应时间短的优先

每个设备的状态设置为:

(1)down 表⽰单前的server暂时不参与负载

(2)weight 默认为1.weight越⼤,负载的权重就越⼤。

(3)max_fails :允许请求失败的次数默认为1.当超过最⼤次数时,返回proxy_next_upstream 模块定义的错误(4)fail_timeout:max_fails次失败后,暂停的时间。

(5)backup:其它所有的⾮backup机器down或者忙的时候,请求backup机器。所以这台机器压⼒会最轻。nginx⽀持同时设置多组的负载均衡,⽤来给不⽤的server来使⽤。

2、fastcgi⽀持

⽰例1:分布式fastcgi的架构的应⽤

注:配置⽂件中有相关默认⽰例,只需要打开相关的注释就可以实现php页⾯的解析了。以下⽰例只是应⽤于nginx与fastcgi安装在同⼀台电脑的情况,

location ~ \\.php$ { root html;

fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;

#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fcgi.conf;}

如果fastcgi安装在其它主机上实现有是分布是的架构,如上图,对于php页⾯的处理需要修改,⼀共需要修改⼏个地⽅:(1)修改nginx.conf⽂件如下:location ~ \\.php$ { root html;

fastcgi_pass 192.168.129.22:9000; fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /opt/www/$fastcgi_script_name; include fcgi.conf;}

两处说明:⼀个是访问nginx,nginx把请求转发到fastcgi处理,但是php页⾯⼜是在fastcgi那台机器上的/opt/www⽬录中,所以需要修改以上两个地⽅才能实现php页⾯的解析。(2)修改/usr/local/php/etc/php-fpm.conf⽂件注:在安装fastcgi主机上:

192.168.129.22:9000

192.168.129.21说明:

第⼀处监听本机的9000端⼝,默认是127.0.0.1,由于是分布式应⽤,需要修改。第⼆处只允许nginx发来的请求给予解析,也需要修改。⽰例2:

这段配置亦可改成location /abc/ {

root /home/html/; /*是abc的上级⽬录*/}

⽰例3:

把alias的配置改成:location /abc/ {

alias /home/html/def/;}

那么nginx将会从/home/html/def/取数据,这段配置还不能直接使⽤root配置,如果⾮要配置,只有在/home/html/下建⽴⼀个 def->abc的软link(快捷⽅式)了。说明:

1、使⽤alias时⽬录名后⾯⼀定要加 /

2、nginx、resin当虚拟⽬录名与真实⽬录同名时,虚拟⽬录⽐真实⽬录优先级要⾼。1.5.10 nginx虚拟主机

虚拟主机通常有三种情况:⼀、多ip地址

⼆、单ip多端⼝实现

三、单ip⼀个端⼝多主机头(或者是多域名实现)在这⾥只是实现后两种虚拟主机的配置⽅法:⽅法⼀:

1.修改配置⽂件

vi /usr/local/nginx/conf/nginx.conf

#注释原有server内容,加⼊以下内容,相关内容省略,如⽇志出错提⽰等。server {

listen 99;

server_name localhost; location / {

index index.html;

root /usr/local/www1/htdocs; }}

server {

listen 88;

server_name localhost; location / {

index index.html;

root /usr/local/www2/htdocs; }}

2.其它准备⼯作

mkdir -p /usr/local/www1/htdocscd /usr/local/www1/htdocs

echo \"web server 1\" >index.htmlmkdir -p /usr/local/www2/htdocscd /usr/local/www2/htdocs

echo \"web server 2\">index.html

3.重启nginx服务

(1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动

⽅法⼆:

⽅法⼆采⽤的是⽐较常⽤的虚拟主机配置,如单IP,80端⼝,通过域名来实现区分不同的⽹站主页。在⽅法⼀的基础上修改为以下配置。注:需要有dns的⽀持,有域名,在下⾯的配置中,只是实现了静态页⾯实现,如果要实现动态的功能,参考相头内容。server {

listen 80; server_name ;

access_log logs/koumm.access.log main;

location / {

index index.html;

root /var/www/koumm.com/htdocs; }}

server {

listen 80; server_name ;

access_log logs/abc.access.log main; location / {

index index.html;

root /var/www/abc.com/htdocs; }}

因篇幅问题不能全部显示,请点此查看更多更全内容