Debian系统下为PHP程序配置Nginx服务器的基本教程

Nginx 目前来说已经很流行了,所以打算把现有的Apache先替换一部分,在批量部署和管理方面都要考虑到。因为nginx的所有模块都是静态编译的不像apache那样可以动态添加模块,所以在一开始就要考虑清楚需求,结合现在很火的LAMP模式,其中P最常见的是PHP,目前较好的FastCGI的管理器有spaw-fcgi和php-fpm,而php老版本都是需要源码安装通过打补丁的方式把php-fpm打进去,spaw-fcgi是lighttpd默认的FastCGI管理器,因为牵扯到源码安装,当前的软件包版本在大规模部署起来不是很方便,但是还是有解决办法的。

    Nginx安装方法:

1 apt网络安装

修改源列表

vi /etc/apt/sources.list
#加入以下源
deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

更新源列表并通过apt安装nginx

apt-key add nginx_signing.key
apt-get update
apt-get install nginx

2 源码编译安装
       先安装编译环境, 由于nginx在以后的使用中会需要用到perl正则、压缩算法、SSL等特性,所以我们需要提前安装相关库文件。

apt-get install build-essential
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libssl0.9.8

下载最新的稳定版nginx

wget http://nginx.org/download/nginx-1.2.3.tar.gz
        解压查看编译选项

tar zxvf nginx-1.2.3.tar.gz
cd nginx-1.2.3
#--help可以看到可以配置的参数
./configure --help

查看编译可选的配置参数(以下只是一些常用的配置项):

--prefix=PATH                      nginx的默认安装路径,没有指定的话。默认为/usr/local/nginx

--sbin-path=PATH                nginx可执行命令文件的路径,没有指定的话,默认<prefix>/sbin/nginx

--conf-path=PATH               nginx配置文件路径,没有指定的话,默认为<prefix>/conf/nginx.conf

--error-log-path=PATH        在nginx.conf中没有使用error_log指定错误日志路径时,默认<prefix>/logs/error.log

--http-log-path=PATH         定义被访问文件的日志存放路径,如果在nginx.conf中没有使用access_log指定,默认为<prefix>/logs/access.log

--pid-path=PATH                    当在nginx.conf中没有使用pid指定pid文件路径时,默认为<prefix>/logs/nginx.pid

--lock-path=PATH                   锁文件存放路由,如果在nginx.conf中没有指定,则默认为<prefix>/logs/nginx.lock

--user=USER                        如果在Nginx.conf中没有使用user定义进程运行的属主,则默认为nobody

--group=GROUP                       如果在Nginx.conf中没有使用user定义进程运行的属组,则默认为nobody

--builddir=DIR                     set build directory

--with-rtsig_module                使用rtsig模式

--with-select_module               使用select模式,如果当前平台没有其他有效模式,则默认编译

--without-select_module            禁止select模式

--with-poll_module                 使用poll模式,如果当前平台没有其他有效模式,则默认编译

--without-poll_module              禁止poll模式

--with-file-aio                    enable file AIO support

--with-ipv6                        开启IPV6支持

--with-debug                       开启debug

以下这些模块默认没有开启,可以使用--with命令开启以下模块

--with-http_ssl_module             开启ssl模块

--with-http_realip_module          可以在后端记录客户端IP

--with-http_addition_module        enable ngx_http_addition_module

--with-http_flv_module             开启flv模块

--with-http_mp4_module             开启mp4模块

--with-http_gzip_static_module     开启gzip模块

--with-http_secure_link_module     enable ngx_http_secure_link_module

--with-http_stub_status_module     开启状态查看模块

以下模块默认是开启的,可以使用--without选项关闭相关模块

--without-http_charset_module      disable ngx_http_charset_module

--without-http_gzip_module         禁用gzip压缩模块

--without-http_ssi_module          禁用ssl模块

--without-http_userid_module       disable ngx_http_userid_module

--without-http_access_module       禁用access模块

--without-http_auth_basic_module   禁用auth_basic认证模块

--without-http_autoindex_module    禁用列目录模块

--without-http_geo_module          禁用geo模块

--without-http_map_module          禁用map模块

--without-http_referer_module      disable ngx_http_referer_module

--without-http_rewrite_module      禁用重定向模块

--without-http_proxy_module        禁用代理模块

--without-http_fastcgi_module      禁用fastcgi模块

--without-http_uwsgi_module        disable ngx_http_uwsgi_module

--without-http_scgi_module         disable ngx_http_scgi_module

--without-http_memcached_module    disable ngx_http_memcached_module

--without-http_limit_conn_module   disable ngx_http_limit_conn_module

--without-http_limit_req_module    disable ngx_http_limit_req_module

--without-http_empty_gif_module    disable ngx_http_empty_gif_module

--without-http_browser_module      disable ngx_http_browser_module

--without-http_upstream_ip_hash_module    禁用upstream模块

--with-http_perl_module            开启perl模块
  --with-perl_modules_path=PATH      设置perl模块路径
  --with-perl=PATH                   为perl库设置路径
  --http-client-body-temp-path=PATH  set path to store http client request body temporary files
  --http-proxy-temp-path=PATH        set path to store http proxy temporary files
  --http-fastcgi-temp-path=PATH      set path to store http fastcgi temporary files
  --http-uwsgi-temp-path=PATH        set path to store http uwsgi temporary files
  --http-scgi-temp-path=PATH         set path to store http scgi temporary files
  --without-http                     禁用http服务
  --without-http-cache               禁用http cache
  --with-mail                       开启mail服务
  --with-mail_ssl_module             在mail服务中开启ssl
  --without-mail_pop3_module         disable ngx_mail_pop3_module
  --without-mail_imap_module         disable ngx_mail_imap_module
  --without-mail_smtp_module         disable ngx_mail_smtp_module
  --with-google_perftools_module     开启google_perftools模块
  --with-cpp_test_module             开启cpp_test模块
  --add-module=PATH                  enable an external module
  --without-pcre                     禁止使用perl正则库
  --with-pcre                        强制使用perl正则库

     编译安装

./configure --prefix=/etc/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module
--with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio --with-ipv6

结果如下图:

编译并安装

make && make install

     PS:FastCGI回顾
     FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
    Nginx不支持对外部程序的直接解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

php-fpm

PHP5.3版本源码已经默认支持php-fpm了,但是debian6认为它还没经过广泛的测试,所以在debian6的软件仓库中,虽然php版本为5.3.3,但是却没包含php-fpm,如果不想手工编译安装php的话可以换一个源。
    
     修改源列表

vi /etc/apt/sources.list
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

更新源列表,安装php5-fpm

apt-get update wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -
apt-get install php5-fpm

安装其他常用php5组件

apt-get install php5 php5-cgi php5-cli php5-mysql php5-memcache

启动php-fpm

/etc/init.d/php5-fpm start

这样的话最基本的nginx+php环境就搭建完毕了。

Nginx配置文件粗解
nginx的配置文件结构类似下图这样的结构:

配置文件主要参照编译完成后生成的默认配置文件。

   主模块的配置选项

user指令设置进程以什么用户运行,在源码编译安装时指定的nginx用户,如果在编译时没有指定,默认是nobody账户,在配置文件中此行处于注释状态,  user 指令可以设置两个参数,第一个指定进程所属用户,第二个是可选,指定进程所属组

  user nginx nobody;

设置工作进程数,一个工作进程为一个单线程,在CPU密集型环境中,可以设置worker_processes数目为CPU核数

  worker_processes 4;

指定nginx错误日志文件的位置,如果要禁止错误日志使用error_log /dev/null,error_log可以存在于不同的字段main、http、server等,文件后面可以指定记录的日志的默认等级。

  error_log logs/error.log;

设置pid文件路径,可以使用kill命令发送相关信号

  pid    logs/nginx.pid;

event模块配置选项,event模块主要控制nginx处理连接的方式

  events {

  #如果在configure时指定的不止一个事件模型,可以通过use告诉nginx要使用哪一个模型:seletc、poll、kqueue、epoll、rtsig、/dev/poll、eventport等

  use epoll;

  #worker_connections和worker_processes可以计算你的理论最大链接数, worker_connections*worker_processes

  worker_connections 1024;

}

http模块里面主要是对http服务器相关属性进行设置

 http {

  #可以用include指令包含一些其他文件,支持通配符,可以使用绝对路径,也可以使用相对路径,相对路径以nginx.conf为根据

  include    mime.types;

  #设置默认的MIME类型

  default_type application/octet-stream;

  #描述记录日志的格式,在定义格式时可以使用一些变量,各个变了的含义可以从各个模块汇总查找

  log_format main '$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 main;

  #sendfile拷贝文件在内核态完成,更加高效

  sendfile    on;

  #tcp_nopush   on;

  #可以设置两个值,第一个表示客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。第二个值指定的应答头中keep-alive中timeout的值,让浏览器知道什么时候关闭连接。

  keepalive_timeout 65;

  #开启gzip压缩

  gzip on;

  #在三次握手时,发送给客户端应答后的超时时间,目前还没进入连接状态,只完成了两次握手,如果在规定时间没收到应答包,nginx将关闭链接

  send_timeout 30

  server {

     xxx

  }

}

server模块嵌在http模块中,主要用来配置虚拟主机

  server {

    #指定server字段中可以被访问到的ip地址及端口

    listen    80;

    #将http请求的主机头与server中的server_name参数进行匹配,并找出第一个结果,如果没有server_name参数匹配上,则第一个出现listen的server将被匹配,多域名用空格分割

    server_name www.nginx.com;

    #设个指令是应答头重的content-type字段使用指定的编码集,off表示不在应答头重添加content-type信息

    charset off;

    #指定www.nginx.com域名的访问日志路径及格式

    access_log logs/host.access.log main;

    #如果在url中没有指定文件,则设置一个默认主页,可以设置多个文件,空格分开,可以在http、server、location中设置

    index index.php index.htm;

    #根据URL的不同需求进行配置,可以使用字符串和正则匹配,最确切的匹配被使用,搜索到第一个后会停止

    # ~* 不区分大小写;~ 区分大小写;^~ 禁止在字符串匹配后检查正则;= 在URL和location之间精确匹配,匹配完成后不做额外搜索。

    location /i/ {

      #请求到达后的文件根目录,在请求中root会把location匹配的值加到root指定的值后面,请求/i/a.php,则会是/html/i/a.php响应

      root  html;

      #在location中设置index

      index index.html index.htm;

    }

    #为错误代码指定相应的错误界面,可以用在http、server、location字段中。

    error_page 404       /404.html;

    # redirect server error pages to the static page /50x.html

    error_page  500 502 503 504 /50x.html;

    #精确匹配50x.html,真实响应是/html/50x.html

    location = /50x.html {

      root  html;

    }

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

    location ~ \.php$ {

      proxy_pass  http://127.0.0.1;

    }

    #配置php脚本传至fastcgi

    location ~ \.php$ {

     root      html;

     fastcgi_pass  127.0.0.1:9000;

     fastcgi_index index.php;

     #/scripts是php脚本所在的目录

      fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

      include    fastcgi_params;

    }

    #拒绝访问.htaccess文件

    location ~ /\.ht {

      deny all;

    }

  }
(0)

相关推荐

  • PHP的Symfony和CodeIgniter框架的Nginx重写规则配置

    Symfony Symfony国外很流行的php框架,目前国内用的相对较少,但是一定会在国内火起来. nginx重写规则如下 server { server_name jb51.net www.jb51.net; root /data/site/www.jb51.net; location / { # try to serve file directly, fallback to rewrite try_files $uri @rewriteapp; } location @rewriteapp

  • Linux下从零开始安装配置Nginx服务器+PHP开发环境

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理.负载平衡.其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新. 因此我打算用其替代Apache应用于Linux服务器上.但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞.那么我们必须使用FastCGI方式来执行PHP程序. 下面是我成功地配置Ngi

  • Linux系统中设置多版本PHP共存配合Nginx服务器使用

    应用环境 LNMP的环境,当前PHP版本5.3.8,遇到一个应用需求只支持PHP 5.2.x,又希望保持现有应用还是用PHP 5.3.8.也就是说需要两个版本的PHP同时存在,供nginx根据需要调用不同版本. 思路 Nginx是通过PHP-FastCGI与PHP交互的.而PHP-FastCGI运行后会通过文件.或本地端口两种方式进行监听,在Nginx中配置相应的FastCGI监听端口或文件即实现Nginx请求对PHP的解释. 既然PHP-FastCGI是监听端口和文件的,那就可以让不同版本的P

  • 隐藏Nginx或Apache以及PHP的版本号的方法

    当黑客入侵一台服务器时,首先会"踩点", 这里的"踩点",指的是了解服务器中运行的一些服务的详细情况,比如说:版本号,当黑客知道相应服务的版本号后,就可以寻找该服务相应版本的一些漏洞来入侵,攻击,所以我们需要隐藏这些版本号来避免一些不必要的问题 我们来测试一下 insoz:~ insoz$ curl -I http://127.0.0.1/phpinfo.php HTTP/1.1 200 OK Server: nginx/1.5.0 Date: Thu, 18 Ju

  • windows平台中配置nginx+php环境

    刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是"引擎x",一般引"擎代"表了性能,而"x"大多出现是表示"xtras(额外的效果)",那么整个词的意思就是类似"极致效果","额外性能".当然这里不是要来唠嗑,以上是题外话. nginx相较于我们熟悉的apache,IIS的优势,就我浅入浅出的了解,在于"反向代理"和"负载均衡&quo

  • Nginx配置PHP的Yii与CakePHP框架的rewrite规则示例

    Yii的Nginx rewrite 如下为nginx yii的重写 server { set $host_path "/data/site/www.jb51.net"; access_log /data/logs/nginx/www.jb51.net_access.log main; server_name jb51.net www.jb51.net; root $host_path/htdocs; set $yii_bootstrap "index.php"; #

  • 安装配置php-fpm来搭建Nginx+PHP的生产环境

    nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端. nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx 本文以php-fpm为例介绍如何使nginx支持PHP 一.编译安装php-fpm 什么是PHP-FPM PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到. P

  • 在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程

    安装homebrew homebrew是mac下非常好用的包管理器,会自动安装相关的依赖包,将你从繁琐的软件依赖安装中解放出来. 安装homebrew也非常简单,只要在终端中输入: <!-- lang: shell --> ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" homebrew的常用命令: <!-- lang: shell --> brew upda

  • Debian系统下为PHP程序配置Nginx服务器的基本教程

    Nginx 目前来说已经很流行了,所以打算把现有的Apache先替换一部分,在批量部署和管理方面都要考虑到.因为nginx的所有模块都是静态编译的不像apache那样可以动态添加模块,所以在一开始就要考虑清楚需求,结合现在很火的LAMP模式,其中P最常见的是PHP,目前较好的FastCGI的管理器有spaw-fcgi和php-fpm,而php老版本都是需要源码安装通过打补丁的方式把php-fpm打进去,spaw-fcgi是lighttpd默认的FastCGI管理器,因为牵扯到源码安装,当前的软件

  • Centos7系统下搭建.NET Core2.0+Nginx+Supervisor环境

    一.Linux .NET Core简介 一直以来,微软只对自家平台提供.NET支持,这样等于让这个"理论上"可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET). 直到微软推出完全开源的.NET Core.这个开源的平台兼容.NET  Standard,并且能在Windows.Linux和MacOS上提供完全一致的API.虽然这个小巧的.NET框架只是标准.NET的一个子集,但是已经相当强大了. 一方面,这个小巧的框架可以让某些功能性应用同时运

  • CentOS6.5系统简单安装与配置Nginx服务器的方法

    本文实例讲述了CentOS6.5系统简单安装与配置Nginx服务器的方法.分享给大家供大家参考,具体如下: 依赖包安装 在安装nginx前,需要确保系统安装了g++.gcc.openssl-devel.pcre-devel和zlib-devel软件.安装必须软件: [root@admin /]#yum install gcc-c++ yum -y install zlib zlib-devel openssl openssl--devel pcrepcre-devel 检查系统安装的Nginx:

  • windows系统下node.js环境配置与安装教程图文详解(详细版)

    国内目前关注最高,维护最好的一个关于nodejs的网站应该是http://www.cnodejs.org/ windows系统下简单nodejs环境配置. 第一步:下载安装文件 下载地址:官网https://nodejs.org/en/download/ 这里用的是 第二步:安装nodejs 下载完成之后,双击 node-v6.9.1-x64.msi,开始安装nodejs,默认是安装在C:\Program Files\nodejs下面 第三步:安装相关环境 打开C:\Program Files\

  • macOS系统下Vscode的python配置教程

    1. Vscode是一款开源的跨平台编辑器.默认情况下,vscode使用的语言为英文(en),以下步骤改为中文 打开vscode工具,使用快捷键组合[Cmd+Shift+p],在搜索框中输入"configure display language",点击确定后,修改locale.json文件下的属性"locale"为"zh-CN",重启vscode工具. 如果重启后vscode菜单等仍然是英文显示,在商店查看已安装的插件,把中文插件重新安装一遍(商

  • Windows 系统下的 Git 2.7 最新下载及安装教程图文详解

    Git是一个开源的分布式版本控制系统,用于高效的管理各种大小项目和文件.有着管理多样化.分享速度快.数据安全 更好的分支支持.方便多人协调等优点,而备受程序猿的喜爱. 下面给大家分享一个在[windows系统]下[Git 图形化界面]的安装教程 ,欢迎大家评鉴与参考.  一.软件下载    官网地址:https://git-scm.com/    1.打开 Git 官网,点击 [Downloads] 2.选择合适的操作系统(本教程是以 Windows 系统为例),选择 [Windows](会根据

  • Win10系统下MySQL8.0.16 压缩版下载与安装教程图解

    官网下载: https://www.mysql.com 进入MySQL官网,选择download 选择社区 选择MySQL 社区 服务器 点击download下载 点击最下面不登陆下载 下载完成是这样一个压缩包 安装 解压文件 将bin文件的目录加入电脑系统环境配置path下 新建my.ini配置文件 [mysql] default-character-set = utf8 [mysqld] #端口 port = 3306 #mysql安装目录 basedir = E:/mysql-8.0.16

  • Windows系统下安装VirtualBox及安装Ubuntu16.04的详细教程

    1.软件介绍 VirtualBox VirtualBox 是一款免费的开源虚拟机软件,所谓虚拟机软件,就是能够提供各种模拟的硬件环境,并且在其上安装各种操作系统,目前支持Window,Linux,Mac OS X. 其下载地址可以点击这里.点击链接后,因为是要在window下安装,可以参考下面,直接点击红框部分的链接下载widnow版的VirtualBox 下载好了后,直接双击打开,类似下面的图文步骤直接不停点击下一步安装即可 Ubuntu Ubuntu,中文称呼"乌班图",是一个开源

  • Windows10系统下查看mysql的端口号并修改的教程图解

    mysql的端口号默认是3306,初学者可能有时会忘记或者之前修改了默认的端口号,忘记了,或者很多时候我们一台电脑需要安装两个mysql或者想设置一个自己的喜欢的数字,那么接下来我们来看看如何查看或者修改mysql现有的端口号: 同时点击或者依次win+R打开运行界面输入cmd或者在开始菜单的搜索框输入cmd 如图所示 打开DOS界面后 通过输入命令进入 安装目录下的bin文件夹 如图所示 输入如图所示的命令行 mysql这个是服务名哦 如果安装版的就是mysqld如果解压版的就是自己设置的哦

  • 在Debian系统下配置LNMP的教程

    LNMP环境的配置是需要让我们的主机支持Nginx.MySQL.PHP.phpMyAdmin,这样配置好之后就可以直接使用此环境,并在上面运行网站了,下面我来配置方法. 我们先来看官方说明 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat.Debian/Ubuntu VPS(VDS)或独立主机安装LNMP(Nginx.MySQL.PHP.phpMyAdmin)生产环境的Shell程序 1,安装MySQL 执行命令: apt-get install -y my

随机推荐

其他