首页 运维 nginx Debian系统下怎么为PHP程序配置Nginx服务器

Debian系统下怎么为PHP程序配置Nginx服务器

May 15, 2023 am 08:01 AM
php nginx debian

    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可执行命令文件的路径,没有指定的话,默认/sbin/nginx</p><p>--conf-path=path nginx配置文件路径,没有指定的话,默认为<prefix>/conf/nginx.conf</p><p>--error-log-path=path 在nginx.conf中没有使用error_log指定错误日志路径时,默认<prefix>/logs/error.log</p><p>--http-log-path=path 定义被访问文件的日志存放路径,如果在nginx.conf中没有使用access_log指定,默认为<prefix>/logs/access.log</p><p>--pid-path=path 当在nginx.conf中没有使用pid指定pid文件路径时,默认为<prefix>/logs/nginx.pid</p><p>--lock-path=path 锁文件存放路由,如果在nginx.conf中没有指定,则默认为<prefix>/logs/nginx.lock</p><p>--user=user 如果在nginx.conf中没有使用user定义进程运行的属主,则默认为nobody</p><p>--group=group 如果在nginx.conf中没有使用user定义进程运行的属组,则默认为nobody</p><p>--builddir=dir set build directory</p><p>--with-rtsig_module 使用rtsig模式</p><p>--with-select_module 使用select模式,如果当前平台没有其他有效模式,则默认编译</p><p>--without-select_module 禁止select模式</p><p>--with-poll_module 使用poll模式,如果当前平台没有其他有效模式,则默认编译</p><p>--without-poll_module 禁止poll模式</p><p>--with-file-aio enable file aio support</p><p>--with-ipv6 开启ipv6支持</p><p>--with-debug 开启debug</p><p>以下这些模块默认没有开启,可以使用--with命令开启以下模块</p><p> --with-http_ssl_module 开启ssl模块</p><p> --with-http_realip_module 可以在后端记录客户端ip</p><p> --with-http_addition_module enable ngx_http_addition_module</p><p> --with-http_flv_module 开启flv模块</p><p> --with-http_mp4_module 开启mp4模块</p><p> --with-http_gzip_static_module 开启gzip模块</p><p> --with-http_secure_link_module enable ngx_http_secure_link_module</p><p> --with-http_stub_status_module 开启状态查看模块</p><p> 以下模块默认是开启的,可以使用--without选项关闭相关模块</p><p> --without-http_charset_module disable ngx_http_charset_module</p><p> --without-http_gzip_module 禁用gzip压缩模块</p><p> --without-http_ssi_module 禁用ssl模块</p><p> --without-http_userid_module disable ngx_http_userid_module</p><p> --without-http_access_module 禁用access模块</p><p> --without-http_auth_basic_module 禁用auth_basic认证模块</p><p> --without-http_autoindex_module 禁用列目录模块</p><p> --without-http_geo_module 禁用geo模块</p><p> --without-http_map_module 禁用map模块</p><p> --without-http_referer_module disable ngx_http_referer_module</p><p> --without-http_rewrite_module 禁用重定向模块</p><p> --without-http_proxy_module 禁用代理模块</p><p> --without-http_fastcgi_module 禁用fastcgi模块</p><p> --without-http_uwsgi_module disable ngx_http_uwsgi_module</p><p> --without-http_scgi_module disable ngx_http_scgi_module</p><p> --without-http_memcached_module disable ngx_http_memcached_module</p><p> --without-http_limit_conn_module disable ngx_http_limit_conn_module</p><p> --without-http_limit_req_module disable ngx_http_limit_req_module</p><p> --without-http_empty_gif_module disable ngx_http_empty_gif_module</p><p> --without-http_browser_module disable ngx_http_browser_module</p><p> --without-http_upstream_ip_hash_module 禁用upstream模块</p><p> --with-http_perl_module 开启perl模块<br/> --with-perl_modules_path=path 设置perl模块路径<br/> --with-perl=path 为perl库设置路径<br/> --http-client-body-temp-path=path set path to store http client request body temporary files<br/> --http-proxy-temp-path=path set path to store http proxy temporary files<br/> --http-fastcgi-temp-path=path set path to store http fastcgi temporary files<br/> --http-uwsgi-temp-path=path set path to store http uwsgi temporary files<br/> --http-scgi-temp-path=path set path to store http scgi temporary files<br/> --without-http 禁用http服务<br/> --without-http-cache 禁用http cache<br/> --with-mail 开启mail服务<br/> --with-mail_ssl_module 在mail服务中开启ssl<br/> --without-mail_pop3_module disable ngx_mail_pop3_module<br/> --without-mail_imap_module disable ngx_mail_imap_module<br/> --without-mail_smtp_module disable ngx_mail_smtp_module<br/> --with-google_perftools_module 开启google_perftools模块<br/> --with-cpp_test_module 开启cpp_test模块<br/> --add-module=path enable an external module<br/> --without-pcre 禁止使用perl正则库<br/> --with-pcre 强制使用perl正则库</p><p><strong> 编译安装</strong></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>./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

登录后复制

结果如下图:

Debian系统下怎么为PHP程序配置Nginx服务器

编译并安装

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的整个运作过程。

Debian系统下怎么为PHP程序配置Nginx服务器

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的配置文件结构类似下图这样的结构:

Debian系统下怎么为PHP程序配置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 &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;

           &#39;$status $body_bytes_sent "$http_referer" &#39;

           &#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;

  #指定访问日志的路径和格式,缓冲区大小

  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;

    }

  }
登录后复制

以上是Debian系统下怎么为PHP程序配置Nginx服务器的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP的目的:构建动态网站 PHP的目的:构建动态网站 Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP:处理数据库和服务器端逻辑 PHP:处理数据库和服务器端逻辑 Apr 15, 2025 am 12:15 AM

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

nginx怎么配置云服务器域名 nginx怎么配置云服务器域名 Apr 14, 2025 pm 12:18 PM

在云服务器上配置 Nginx 域名的方法:创建 A 记录,指向云服务器的公共 IP 地址。在 Nginx 配置文件中添加虚拟主机块,指定侦听端口、域名和网站根目录。重启 Nginx 以应用更改。访问域名测试配置。其他注意事项:安装 SSL 证书启用 HTTPS、确保防火墙允许 80 端口流量、等待 DNS 解析生效。

怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker容器名称怎么查 docker容器名称怎么查 Apr 15, 2025 pm 12:21 PM

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。

nginx怎么查版本 nginx怎么查版本 Apr 14, 2025 am 11:57 AM

可以查询 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打开 Nginx 错误页,查看页面的标题。

See all articles