在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28
1.编译安装Nginx 官网:http://wiki.nginx.org/Install 下载:http://nginx.org/en/download.html 1、首先确保系统安装GCC编译器及相关工具(autoconf 和automake他们用于自动创建功能完善的makefile,当前大多数软件包都是使用这一工具生成的makefile的) # yum -y install gcc gcc-c++ autoconf automake 2、Nginx需要依赖下面3个包
注意:如果用源码安装的话,后面nginx安装的时候需要指定 --with-pcre 对应的压缩包路径,如果用二进制包安装则不需指定 依赖包一键安装: yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel # wget http://nginx.org/download/nginx-1.8.0.tar.gz # tar -zvxf nginx-1.8.0.tar.gz # cd ./nginx-1.8.0 #groupadd -r nginx #useradd -r -g nginx -s /bin/false -M nginx #./configure --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi/ 或者默认安装目录( #注意 \ 前面至少一个有空格 ./configure --sbin-path=/usr/local/nginx/nginx \ --conf-path=/usr/local/nginx/nginx.conf \ --pid-path=/usr/local/nginx/nginx.pid \ --with-http_ssl_module \ --with-pcre=../pcre-8.21 \ #指向解压的源码目录 --with-zlib=../zlib-1.2.8 \ #指向解压的源码目录 --with-openssl=../openssl-1.0.1 \ #指向解压的源码目录 --with-http_stub_status_module \#启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态 --user=nginx \ --group=nginx # make && make install
安装Nginx时报错 错误提示:./configure: error: the HTTP rewrite module requires the PCRE library. 安装pcre-devel解决问题
解决办法: # yum -y install openssl openssl-devel
# yum -y install pcre-devel openssl openssl-devel
启动nginx # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
安装成功查看nginx进程 # ps aux | grep nginx
测试页面,直接输入服务器ip 其实nginx默认的web工作目录在/usr/local/nginx/html 可以修改nginx的配置文件nginx.conf改变到其他路径
防火墙配置 注意如果你希望在本地机器例如xp访问虚拟机的网页,如果是centos6需要修改防火墙启动80端口 # cd /etc/sysconfig 修改iptables文件,或者直接用vim编辑 # vim /etc/sysconfig/iptables 添加下面一行,打开防火墙80端口: -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 重启防火墙 查看CentOS防火墙信息:/etc/init.d/iptables status 关闭CentOS防火墙服务:/etc/init.d/iptables stop
停止nginx 查询nginx主进程号 从容停止Nginx:
开启目录自动显示
nginx的配置文件nginx.conf在 # cd /usr/local/nginx/conf 有时候需要开启目录自动显示功能
重启nginx # /usr/local/nginx/sbin/nginx -s reload
获取安装信息 如果需要重新安装nginx,需要知道之前的安装信息 # /usr/local/nginx/sbin/nginx -V
2.安装php 去www.php.net找下载最新的版本 http://www.php.net/downloads.php 下载解压 # wget http://cn2.php.net/get/php-5.5.28.tar.gz/from/this/mirror # tar zxvf php-5.5.28.tar.gz # cd php-5.5.28
配置 #./configure --prefix=/usr/local/php \
如果需要--with-jpeg-dir \ 可以按下面的装很多yum
如果需要GD库还要 ./configure --prefix=/usr/local/php --with-mysql --enable-fpm--enable-opcache --with-freetype-dir --with-jpeg-dir --with-png-dir --with-gd --with-zlib --with-libxml-dir --enable-xml --disable-debug --enable-safe-mode --enable-mbstring 如果配置错误,需要安装需要的模块,直接yum一并安装依赖库 # yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql pcre-devel
配置成功:
编译安装 配置成功后继续完成编译安装php # make && make install php-5.4.11已经支持fastcgi了,不用在打补丁了。 复制php-fpm文件到php安装目录 # cp -R ./sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf
拷贝php.ini文件 安装目录有2个文件:php.ini-development和php.ini-production 注意php.ini-production拥有较高的安全性设定,则适合上线当产品使用 # cp php.ini-development /usr/local/php/lib/php.ini 或者 # cp php.ini-production /usr/local/php/lib/php.ini 如果操作了这一步以后使用phpinfo()就会看到Loaded Configuration File:
php-fpm启动 拷贝启用文件 启动
php安装成功查看进程 #ps aux|grep php
重启 # killall php-fpm # /etc/init.d/php-fpm
php-fpm配置中关于进程数的配置比较重要,其他可以默认: user = www 关于php-fpm配置参考: http://blog.csdn.net/unix21/article/details/8743246 和 php-fpm – 配置详解(主要是针对pm几个选项进行测试)
php-fpm源码目录:php-5.5.10\sapi\fpm
配置nginx支持PHP nginx的配置文件nginx.conf在 # cd /usr/local/nginx/conf
nginx默认web文件夹在 /usr/local/nginx/html
如果需要nginx支持PHP需要修改nginx.conf,加入如下语句: 本机的web文件夹在/usr/www,需要修改fastcgi_param SCRIPT_FILENAME指向对应目录即可: 所以
注意,如果pfp-fpm配置文件侦听9001等端口,需要改对应文件: # /usr/local/php/etc/php-fpm.conf
如果还需要解析/usr/www下的html文件,需要改配置
还有一点需要注意:php-fpm侦听端口范围9000-9999,nginx开启端口800-900比较好。
重启nginx # /usr/local/nginx/sbin/nginx -s reload 测试页面info.php
上传至/usr/www目录,成功运行
===================================
开启PHP的opcace php.ini配置opcace ;opcache
如果嫌这个不直观可以装个PHP文件查看,地址在https://gist.github.com/ck-on/4959032,不过此网站目前国内无法打开了。 把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到: Opcache参考:
3.升级php 假设之前安装过老版本的php例如php5.4.8,需要安装最新的版本只要用之前的安装步骤安装最新的版本即可.
4.跟踪Nginx和PHP 设置Nginx和PHP都是单子进程 修改nginx.conf worker_processes 1; 修改php-fpm.conf pm = static pm.max_children = 1 #ps aux
strace/ltrace strace或ltrace跟踪都可以查看应用程序正在运行过程中发起的系统函数调用和动态库函数调用,二者大同小异。
#strace -p 进程id 通过进程号跟踪指定进程 -o 文件名 跟踪信息输出到指定文件 -f 跟踪其通过fork调用产生的子进程 -t 输出每一个系统调用的发起时间 -T 输出每一个系统调用的消耗时间 退出 Ctrl+C
1).Nginx master process 2).Nginx worker process
3) php-fpm master process
4) php-fpm pool
pstack pstack查看系统调用和函数调用关系,可以看到当前Nginx内部在执行什么函数。 其实,pstack不过是gdb实现的一个shell脚本而已。
5.调试Nginx
由于gdb需要gcc的时候加上-g参数,这样生成的文件才能使用gdb调试,因此我们要对源码做一下小改动 修改auto/cc/conf文件ngx_compile_opt="-c" 变为 ngx_compile_opt="-c -g" 执行configure./configure --prefix=/usr/local/nginx
另一个值得关注的编译选项是-O0,如果在gdb内打印变量时提示"<value optimized out>"或gdb提示显示的当前正执行的代码行与源码匹配不上而让人感觉莫名其妙,那么,这则多半是因为gcc的优化导致,我们可以加上-O0选项来强制禁用gcc的编译优化。除了可以通过编辑objs/Makefile文件,把这两个选项直接加在CFLAGS变量里以外,还有另外几种方法也可以达到同样的效果。 1. 在进行configure配置时,按如下方式执行。
2. 在执行make时,按如下方式执行。
直接修改objs/Makefile文件和上面提到的第2种方法是在我们已经执行configure之后进行的,如果之前已经执行过make,那么还需刷新所有源文件的时间戳,以便重新编译每一个Nginx源文件。
修改nginx的conf配置文件为单进程
查看宏定义 注意:Nginx中有大量的宏,如果不做特殊处理是看不到这些宏定义的:
必须编译的时候使用ggdb3才可以查看定义。 修改auto/cc/conf文件ngx_compile_opt="-c" 变为 ngx_compile_opt="-c -ggdb3" 或者 #make CFLAGS="-ggdb3 -O0" #info macro NGX_OK #macro expand NGX_OK
查看ngx_core.h
启动nginx # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #ps -efH | grep nginx #gdb -p 进程id 或者(gdb) attach 进程id 一样的 利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。 使用l(list)命令查看main 函数,这个main函数是在src/core/nginx.c里面,是nginx的入口函数 (gdb) l #列出源文件,只列出10行,请使用l- 和 l 或者l +行号 或者 l +函数名 进行定位 (gdb) break 215 #在哪行打断点, 可以break main break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式: 断点可以多个 (gdb) info break 列出所有断点 删除指定的某个断点: 禁止使用某个断点 (gdb) continue 从断点开始继续执行直到下一个断点 (gdb) r #run,从main函数开始重新运行程序,因为之前已经执行了,所以要想从main开始调试要r,这样就会结束之前的进程 (gdb) l 列出代码 (gdb) s 下一步,会列出当前所在的文件代码行数 (gdb)finish 结束执行当前函数,显示其返回值(如果有的话) (gdb)bt 打印栈帧,可以看出当前文件名以及函数 (gdb) p *ptr 打印指针内容 (gdb)info args 查看数组 int *array = (int *) malloc (len * sizeof (int)); (gdb)p *array@len @的左边是数组的首地址的值,也就是变量array所指向的内容,右边则是数据的长度,其保存在变量len中 (gdb)p * 结构体变量 查看结构体信息 其实 print *a@5 指针对象都可以看到
查看内存 (gdb)x
forward-search <regexp>
查看void指针 ngx_http_init_connection(ngx_connection_t *c) 查看p *c 如果要直接查看data p *c->data 提示Attempt to dereference a generic pointer. 因为空指针类型必须强制转换! 查看代码
空指针对象转换技巧: *(类型*)(空指针对象)
查看socket # lsof -p 进程id 监控epoll FD #ps aux|grep nginx #sudo ls -alh /proc/Nginx的进程id/fd
使用tcpdump查看数据包 # tcpdump -i eth0 port 80
压力测试 # ab -c l -n 10000 http://127.0.0.1/index.html
6.Nginx的URL重写 1.形如 /xxx/abc这样的 跳转到 /aaa/下 location ~* ^/(.*)/abc {
标志flag用于结束rewrite指令,它的可取值有:
2.形如 /news这样的 location ~* ^/(history|news) {
3.形如 /shanghai并且以这个结尾的 $标识结束符 location ~* ^/(beijing|shanghai)$ {
7.Nginx虚拟主机 实际中需要多个域名绑定到同一台服务器不同的网站,使用server_name即可 server {
如果是多个域名空格即可 server_name www.csdn.net bolg.csdn.net;
8.访问权限 允许指定IP/Ip段 0/24 allow 192.168.1.222;
屏蔽指定IP deny 192.168.1.222;
9.开启gzip压缩 gzip on; 把nginx升级到最新以后,发现用原来的配置启动的时候会提示:
10.屏蔽指定的蜘蛛爬虫 查询最近的60条日志 # tail -n 20 /usr/local/nginx/logs/access.log 发现大量的蜘蛛爬行日志 可以这样屏蔽,加在nginx配置文件的server段
测试,例如我们需要屏蔽YisouSpider,但是不能屏蔽Baiduspider # curl -I -A 'YisouSpider' http://www.../
查指定时间段内的日志 # sed -n '/19\/Feb\/2016:14:13:00/,/19\/Feb\/2016:14:16:59/'p /usr/local/nginx/logs/access.log>>500_20160219-1413-1416.txt 11.Nginx域名重写 需要 blog.csdn.net跳转到www.csdn.net
12.代理tomcat
所有到 http://blog.csdn.net:8080/unix21/a.jsp的都可以用http://blog.csdn.net/unix21/a.jsp 来访问
13.使用tengine http://tengine.taobao.org/index_cn.html
http://tengine.taobao.org/document_cn/http_trim_filter_cn.html 删除 html , 内嵌 javascript 和 css 中的注释以及重复的空白符。
合并多个文件在一个响应报文中。
参数中某位置只包含一个‘?’,则'?'后表示文件的版本,例如: |
2022-08-18
2022-08-15
2022-08-17
2022-11-06
2022-08-17
请发表评论