Linux环境Nginx安装与调试以及PHP安装

Linux下安装PHP的详细过程 如果您计划将PHP与Web服务器(如Apache或Nginx)一起使用,那么在配置更改生效之前,您需要重启Web服务器。在Linux系统中安装PHP非常简单,下面将为您提供详细的安装步骤。在这个文件中,您可以根据需要更改各种PHP配置选项,如内存限制、执行时间限制等。该命令将显示已安装的PHP版本信息。在安装PHP之前,首先需要确保您的Linux系统是最新的。现在,您已经成功安装了PHP,并且可以开始编写和运行PHP脚本。如果一切正常,您将在终端中看到有关PHP的详细信息,包括版本号、模块信息等。 阅读详情

linux版本:64位CentOS 6.8

Nginx版本:nginx1.17.7

php版本:php5.6.40

说明:本博不定时更新为新版本

 

1.编译安装Nginx

官网:http://wiki.nginx.org/Install

下载:http://nginx.org/en/download.html

 

安装GCC

安装nginx需要gcc,如果因为需要安装grpc那么需要gcc4.8,可以先安装gcc

# wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
# yum install -y devtoolset-2-gcc devtoolset-2-binutils
# yum install -y devtoolset-2-gcc-c++ devtoolset-2-gcc-gfortran
# scl enable devtoolset-2 bash
# source /opt/rh/devtoolset-2/enable
# gcc --version

如果不按照grpc可以忽略这个,直接安装yum 安装gcc即可

# yum -y install gcc-c++

 

安装lrzsz 下载上传文件

# yum -y install lrzsz

安装nginx

# wget http://nginx.org/download/nginx-1.17.7.tar.gz

# tar -zvxf nginx-1.17.7.tar.gz

# cd ./nginx-1.17.7

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

# make && make install

 

安装Nginx时报错

错误提示:./configure: error: the HTTP rewrite module requires the PCRE library.

安装pcre-devel解决问题
# yum -y install pcre-devel


错误提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.

解决办法:

# yum -y install openssl openssl-devel


或者一并安装:

# yum -y install pcre-devel openssl openssl-devel

 

错误提示:./configure: error: the HTTP gzip module requires the zlib library.

# yum install -y zlib-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

重启防火墙
# /etc/init.d/iptables restart

查看CentOS防火墙信息:/etc/init.d/iptables status

关闭CentOS防火墙服务:/etc/init.d/iptables stop

 

如果没有防火墙文件

需要

# iptables -P OUTPUT ACCEPT
# service iptables save
# service iptables restart

然后重写iptables文件

其实完整的防火墙文件是这样的

 

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

 

停止nginx

查询nginx主进程号
#ps -ef | grep nginx

从容停止Nginx:
kill -QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号
强制停止Nginx:
pkill -9 nginx

 

开启目录自动显示

 

nginx的配置文件nginx.conf在

# cd /usr/local/nginx/conf

有时候需要开启目录自动显示功能

 

http {
    include       mime.types;
    default_type  application/octet-stream;
	#自动显示目录
	autoindex on;

 

重启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  https://www.php.net/distributions/php-5.6.40.tar.gz

# tar zxvf php-5.6.40.tar.gz

# cd php-5.6.40

 

配置

#./configure --prefix=/usr/local/php \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysql \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-png-dir \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-gd-native-ttf \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip

 

如果需要--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  libcurl-devel   libxslt libxslt-devel  libcurl-devel

 

配置成功:

 

编译安装

配置成功后继续完成编译安装php

# make && make install 

php-5.4.11已经支持fastcgi了,不用在打补丁了。
1.在编译安装时加上'--enable-fpm',注意修改php/etc/php-fpm.conf 去掉pid前的注释;
2.复制/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm还可以做成服务

复制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启动

拷贝启动文件
#  cp -R ./sapi/fpm/php-fpm /etc/init.d/php-fpm

启动
#  /etc/init.d/php-fpm

php安装成功查看进程

#ps aux|grep php

 

重启

# killall php-fpm

#  /etc/init.d/php-fpm

 

php-fpm配置中关于进程数的配置比较重要,其他可以默认:

user = www
group = www
#启动进程的帐户和组
 
pm = dynamic #对于专用服务器,pm可以设置为static。
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children #,子进程最大数
pm.start_servers #,启动时的进程数
pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
 
pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
 

关于php-fpm配置参考:

http://blog.youkuaiyun.com/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,加入如下语句:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/www$fastcgi_script_name;
}

本机的web文件夹在/usr/www,需要修改fastcgi_param SCRIPT_FILENAME指向对应目录即可:

所以

location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/www$fastcgi_script_name;
}

注意,如果pfp-fpm配置文件侦听9001等端口,需要改对应文件:

# /usr/local/php/etc/php-fpm.conf

 

如果还需要解析/usr/www下的html文件,需要改配置

        location / {
            #root   html;
			root /usr/www;
            index  index.html index.htm;
        }

 

还有一点需要注意:php-fpm侦听端口范围9000-9999,nginx开启端口800-900比较好。

 

重启nginx

# /usr/local/nginx/sbin/nginx -s reload

测试页面info.php

<?php
phpinfo();
?>

上传至/usr/www目录,成功运行


错误描述: 
PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in C:\info.php on line 4 

解决办法: 
打开php.ini 配置文件 
找到 
[Date] 
; Defines the default timezone used by the date functions 
; http://php.net/date.timezone 
;date.timezone = 

修改为: 
[Date] 
; Defines the default timezone used by the date functions 
; http://php.net/date.timezone 
date.timezone =PRC    或者UTC

然后记得重启Nginx! 

另外,还有下面两种办法(不建议) 
1、在页头使用date_default_timezone_set()设置 date_default_timezone_set('PRC'); //东八时区 echo date('Y-m-d H:i:s'); 
2、在页头使用 ini_set('date.timezone','Asia/Shanghai'); 

对于中国,可选值:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北),还有新加坡:Asia/Singapore,老的PRC也行。 
PHP所支持的时区列表可参见:http://www.php.net/manual/zh/timezones.php

===================================

【安装PHP扩展】

安装redis扩展

https://pecl.php.net/package/redis

#wget https://pecl.php.net/get/redis-4.3.0.tgz
#tar zvxf redis-4.3.0.tgz
#cd redis-4.3.0
#/usr/local/php/bin/phpize

如果不知道执行find / -name php-config
#./configure --with-php-config=/usr/local/php/bin/php-config
#make && make install

安装成功会生成这样一个目录,可以看到.so文件,注意redis-5.0.2.tgz编译失败,可以用4.0

find / -name php.ini
php.ini直接增加extension=redis.so即可

重启PHP-FPM,phpinfo()

===================================

开启PHP的opcace

php.ini配置opcace

;opcache
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1

 

如果嫌这个不直观可以装个PHP文件查看,地址在https://gist.github.com/ck-on/4959032,不过此网站目前国内无法打开了。

把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:

Opcache参考:

新一代 PHP 加速插件 Zend Opcache 

Linux平滑编译升级php至5.5.0

 

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配置时,按如下方式执行。

 

 
  1. [root@localhost nginx-1.2.0]# CFLAGS="-g -O0" ./configure --prefix=/usr/local/nginx

2. 在执行make时,按如下方式执行。

 

 
  1. [root@localhost nginx-1.2.0]# make CFLAGS="-g -O0" 

直接修改objs/Makefile文件和上面提到的第2种方法是在我们已经执行configure之后进行的,如果之前已经执行过make,那么还需刷新所有源文件的时间戳,以便重新编译每一个Nginx源文件。

 

修改nginx的conf配置文件为单进程

worker_processes  1;
daemon off; 
master_process  off;

 

查看宏定义

注意: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 命令就可以查看其缺省参数的列表。
(gdb) set args -c /usr/local/nginx/conf/nginx.conf
(gdb) 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)可以用来在调试的程序中设置断点,该命令有如下四种形式:
break line-number 使程序恰好在执行给定行之前停止。
break function-name 使程序恰好在进入指定的函数之前停止。
break line-or-function if conditio如果condition(条件)是真,程序到达指定行或函数时停止。
break routine-name 在指定例程的入口处设置断点
如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置
断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name
要想设置一个条件断点,可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100
从断点继续运行:countinue命令break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
break line-number 使程序恰好在执行给定行之前停止。
break function-name 使程序恰好在进入指定的函数之前停止。
break line-or-function if conditio如果condition(条件)是真,程序到达指定行或函数时停止。
break routine-name 在指定例程的入口处设置断点
如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置
断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name
要想设置一个条件断点,可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100
从断点继续运行:countinue命令

断点可以多个

(gdb) info break  列出所有断点

删除指定的某个断点:
(gdb) delete breakpoint 1
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点

禁止使用某个断点
(gdb) disable breakpoint 1
该命令将禁止断点1,同时断点信息的(Enb)域将变为n
允许使用某个断点
(gdb) enable breakpoint 1
该命令将允许断点1,同时断点信息的(Enb)域将变为y

(gdb) continue 从断点开始继续执行直到下一个断点

(gdb) r #run,从main函数开始重新运行程序,因为之前已经执行了,所以要想从main开始调试要r,这样就会结束之前的进程

(gdb) l   列出代码

(gdb) s 下一步,会列出当前所在的文件代码行数

(gdb)finish 结束执行当前函数,显示其返回值(如果有的话)

(gdb)bt  打印栈帧,可以看出当前文件名以及函数

(gdb) p *ptr   打印指针内容

(gdb)info args
打印出当前函数的参数名及其值。

(gdb)info locals
打印出当前函数中所有局部变量及其值。

(gdb)info catch
打印出当前的函数中的异常处理信息。

查看数组

int *array = (int *) malloc (len * sizeof (int));

(gdb)p *array@len

@的左边是数组的首地址的值,也就是变量array所指向的内容,右边则是数据的长度,其保存在变量len中

(gdb)disp * 结构体变量   查看结构体信息

(gdb)p * 结构体变量   查看结构体信息

其实 print *a@5   指针对象都可以看到

 

查看内存

(gdb)x

 

forward-search <regexp>
search <regexp>
向前面搜索。

reverse-search <regexp>

 

查看void指针

ngx_http_init_connection(ngx_connection_t *c)

查看p *c

如果要直接查看data

p *c->data

提示Attempt to dereference a generic pointer.

因为空指针类型必须强制转换!

查看代码

ngx_http_connection_t  *hc;
c->data = hc;


所以强制转换即可

空指针对象转换技巧:

*(类型*)(空指针对象)

 

 

查看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 {
#if (!-e $request_filename) {
      rewrite  ^/(.*)$  /aaa/  permanent;
      break;
#}
}

 

标志flag用于结束rewrite指令,它的可取值有:
 
last - 在搜索到相应的URI和location之后完成rewrite指令;
break - 完成 rewrite指令处理
redirect - 返回302临时重定向,如果replacement替换部分是由http://开始,它将被应用。
permanent - 返回301代码永久重定向

 

2.形如 /news这样的

location ~* ^/(history|news) {
        #if (!-e $request_filename) {
           rewrite  ^/(.*)$  /index.php/Home/$1  last;
           break;
        #}
    }

 

3.形如   /shanghai并且以这个结尾的  $标识结束符

location ~* ^/(beijing|shanghai)$ {
        #if (!-e $request_filename) {
           rewrite  (^/)(beijing|shanghai)  /index.php/Home/Course/index?param1=$2  last;
           break;
        #}
    }

 

7.Nginx虚拟主机

实际中需要多个域名绑定到同一台服务器不同的网站,使用server_name即可

server {
listen       80;
    server_name  www.youkuaiyun.com;

 

如果是多个域名空格即可

server_name  www.youkuaiyun.com  bolg.youkuaiyun.com;

 

8.访问权限

允许指定IP/Ip段  0/24

allow 192.168.1.222;
deny all;

 

屏蔽指定IP

deny 192.168.1.222;
 

 

9.开启gzip压缩

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 text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";


第1行:开启Gzip
第2行:不压缩临界值,大于1K的才压缩,一般不用改
第3行:buffer,就是,嗯,算了不解释了,不用改
第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1
第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧
第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧
第8行:IE6对Gzip不怎么友好,不给它Gzip了

重新加载Nginx
/usr/local/nginx/sbin/nginx -s reload

用curl测试Gzip是否成功开启
#curl -I -H "Accept-Encoding: gzip, deflate" "http://blog.youkuaiyun.com/unix"

把nginx升级到最新以后,发现用原来的配置启动的时候会提示:
duplicate MIME type "text/html" in /usr/local/nginx/conf/nginx.conf:37
    实际上,text/html根本就不需要写的,gzip默认就会压缩它的,只不过以前的nginx版本不提示这个警告而已,新版本的会出这个警告,所以解决办法很简单:把text/html从你的配置中删除。

 

10.屏蔽指定的蜘蛛爬虫

查询最近的60条日志

# tail -n 20 /usr/local/nginx/logs/access.log

发现大量的蜘蛛爬行日志

可以这样屏蔽,加在nginx配置文件的server段

 

	#禁止特定爬虫的抓取
	if ($http_user_agent ~* "Sogou web spider/4.0|YisouSpider|Googlebot|Googlebot-Image|Googlebot-Video|googlebot-mobile|bingbot|msnbot-media|Yahoo! Slurp|AhrefsBot|DotBot") {
	 return 403;
	}

 

 

 

测试,例如我们需要屏蔽YisouSpider,但是不能屏蔽Baiduspider

# curl -I -A 'YisouSpider' http://www.../
# curl -I -A 'Baiduspider' 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.youkuaiyun.com跳转到www.youkuaiyun.com

 

	if ($host = "blog.csdn.com"){
	rewrite ^/(.*)$ http://www.youkuaiyun.com/$1 permanent;
	}

 

 

 

12.代理tomcat

 

server {
	listen       80;
    server_name  blog.youkuaiyun.com;
    root         /usr/www;
	index   index.html index.htm;
	location ^~ /unix21/ {
        proxy_pass   http://127.0.0.1:8080/unix21/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
	}

所有到 http://blog.youkuaiyun.com:8080/unix21/a.jsp的都可以用http://blog.youkuaiyun.com/unix21/a.jsp 来访问

或者这样:

 

    server {
        listen       80;
        server_name  unix21.blog.youkuaiyun.com;

		root         /usr/www;		
		location ^~ {
		index   index.html index.htm;
		trim on;  
		trim_js on;  
		trim_css on;  
        proxy_pass   http://127.0.0.1:8080;
    }  

 

 

 

 

 

 

13.使用tengine

http://tengine.taobao.org/index_cn.html

 

http://tengine.taobao.org/document_cn/http_trim_filter_cn.html

删除 html , 内嵌 javascript 和 css 中的注释以及重复的空白符。

location / {
    trim on;
    trim_js on;
    trim_css on;
}

 


http://tengine.taobao.org/document_cn/http_concat_cn.html

 

合并多个文件在一个响应报文中。

 

 

location /static/css/ {
    concat on;
    concat_max_files 20;
}

location /static/js/ {
    concat on;
    concat_max_files 30;
}


需要修改js和css的代码

 

参数中某位置只包含一个‘?’,则'?'后表示文件的版本,例如:
http://example.com/??style1.css,style2.css,foo/style3.css?v=102234

 

 

参考文献:

nginx模块_使用gdb调试nginx源码 

绑定Nginx到gdb 

Nginx模块开发入门 

gdb调试nginx的helloworld 

gdb中查看数组各项的值

gdb查看运行时数据

GDB 格式化结构体输出  GDB使用总结

PCIe中ACS知识小记 虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。 阅读详情

相关推荐

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

Linux下安装PHP

需要复制相关配置文件:php.ini php-fpm.conf www.conf。设置开机自启动:systemctl enable nginx。5、设置环境变量:export:查看环境变量。7、设置开机自启动php-fpm。6、 配置ngnix.conf。1、安装前的准备,安装依赖。

zhtao369的博客 8814

KALI虚拟机挂代理教程

需要你本地挂了代理,然后通过虚拟机连接本机代理端口,不说废话了,直接说怎么做了。 1.查看选项设置中自己的小飞机的本地端口是多少:(默认是1080) 2.本机win+r打开cmd,输入ipconfig查看本地ip,我的本地ip是192.168.0.107: 2.打开kali虚拟机,编辑ProxyChains配置文件: vi /etc/proxychains.conf 3.在文件末尾的ProxyList中添加物理机本地ip和1080端口作为代理地址: 4.保存并退出即可: esc :wq 回车 5.

qq_34853514的博客 3万+

Linux安装配置nginx+php搭建

pcre(Perl Compatible Regular Expressions)是一个Perl库,是一个用C语言编写的正则表达式的函数库,是轻量级的函数库。在www.conf文件下注释掉listen = /run/php-fpm/www.sock这段内容,添加listen = 127.0.0.1:9000。cd到/usr/local/nginx/html的路径下,创建一个新的后缀为.html的文件。cd到/usr/local/nginx/conf的目录下,修改配置文件,添加以下配置。

qq_44829421的博客 3143

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 426

保姆级教程:用中移ML307模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码

本文详细介绍了如何使用中移ML307系列模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码的全过程。涵盖高德定位服务和OneOS定位服务的配置步骤、常见错误处理及性能优化技巧,帮助开发者快速实现基站定位功能,提升物联网项目的定位精度和稳定性。

weixin_30632089的博客 508

PHP Linux 环境下安装与启用 phpredis 扩展指南

1. 薛定谔的 PHP 当你使用一台 Linux 设备时,你永远不知道你的设备上被安装了多少个 PHP 的版本,也不会知道当前的 PHP 设置是什么,关于 PHP 的多版本管理与信息查看可以查看 这篇文章的末尾。只有你搞明白了 PHP 的版本如何管理你才能顺滑的安装 PHP 的各种插件。 踩坑预警: 如果你的插件没有生效,请依次检查 在 php.ini 中是否启用该插件; 当前环境(命令行 or...

u012925833的博客 2374

【控制模块算法】控制理论的进修之路

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、(经典)自动控制理论【本科阶段】二、现代控制理论【本科阶段】三、最优控制理论【硕士阶段】总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对对控制理论的理解做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、(经典)自动控制理论【本科阶段】 一般控制工程、自动化相关的考研专业课就是自动

qq_35635374的博客 1448

Linux安装PHP环境,详细步骤以及常见问题解决方案

Linux安装PHP环境,详细步骤以及常见问题解决方案

2301_79009758的博客 6868

C#上位机实战:工业产线数据采集与监控系统开发(附源码思路)

模块化设计:四层架构清晰,各模块独立可替换,便于后期维护与扩展;稳定性强:支持断线重连、异常重试、并发采集,满足工业7×24小时运行需求;实用性高:覆盖产线监控核心功能,可视化组件适配工业场景,操作简单;源码可复用:通信类、采集服务、报警管理器等可直接复制到其他上位机项目。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1654

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

Linux环境Nginx安装、调试以及PHP安装

linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install 下载 # wget http://nginx.org/download/nginx-1.8.0.tar.gz # tar -zvxf nginx-1.8.0.tar.gz ...

a847035977的博客 155

基于YOLOv26的道路抛洒物检测系统原理实现

本文提出了一种基于YOLOv26的道路抛洒物智能检测系统,通过深度学习技术实现道路抛洒物的实时检测与分类。系统采用分层架构设计,包含视频采集、目标检测、分类评估和预警处理等模块,能够自动识别轮胎碎片、货物包装、金属零件等多种抛洒物,并根据危险程度分级预警。YOLOv26算法在检测精度和速度上的优势使其特别适合道路监控场景,结合背景建模和运动目标提取技术,有效提高了复杂道路环境下抛洒物的识别率。该系统可集成到现有智能交通监控平台,为道路安全管理提供实时决策支持。

一键难忘的博客 1254

Linux环境Nginx安装、调试以及PHP安装(转)

linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install 下载 # wget http://nginx.org/download/nginx-1.8.0.tar.gz # tar -zvxf ngin...

diaoyu9204的博客 220

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux环境PHP7.0安装

原文地址:http://blog.youkuaiyun.com/21aspnet/article/details/47708763 PHP7和HHVM比较 PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM。HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂了, 并且它不会自动重启。另外它采用JIT, 那么意味着, 重启以后...

weixin_30709929的博客 75

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

nginx+php的配置

作了N多次php环境的搭建,网上的方法还真是多,但是实际操作起来总有一些大大小小的出入,很多错误经常让我纠结不已.久病成医,渐渐地我自己就总结出了一些经验。自我感觉良好。 这种方法并非以前所流行的apache 加 php_module 的方式运行,我是采用nginx 作为web服务器,以fastcgi的方式运行php。 linux下编译: nginx我还是习惯选择8.54的版本,它的编译依赖

不懂不懂 662

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux环境Nginx安装多版本PHP

Linux环境Nginx安装多版本PHP

gdfjhc的博客 2445

windows php posix安装,安装php-posix

workerman使用编译安装workerman的php环境提示 workerman只是一个代码包,如果php环境满足要求,下载后即可使用,实际上没有安装过程. workerman对php环境的要求是: 1.php>=5.3.3,可以运行命令php-v查 ...POSIX 进程间通信 (可移植操作系统接口)1.什么是POSIX标准 Portable Operating System Inte...

weixin_34923852的博客 1410

LNMP安装wordpress(nginx、alisql、php)

### 安装目录 ### 服务:/data/server ### 安装包:/usr/local/src ### configure:编译安装参数 ### 所有程序安装前关闭防火墙 ### systemctl stop firewalld ### setenforce 0 nginx安装过程 安装nginx依赖包 一.安装编译工具gcc  gcc是一个开源编译器集合,用于处理各种各样的语言:C、...

boping7731的博客 684

如何在linux部署php项目

在apache的安装目录下,有一个htdocs目录,现在,4、根据你的描述,可以判定你的apache和php是没有问题的,依据是phpinfo.php能正常显示,那么就没有问题,php有调试功能,最大的可能是没有打开调试功能,而代码有错误,所以就没有什么显示。可以参考一下:php 源码安装 这个安装是 php5的,如果安装的 是 php7,编译会有一点不同:安装 php - 2。2、想要部署代码,首先先把环境装好,根据你的系统,我装的是Ubuntu的,一般都是先装PHP,再装Apache,再装数据库。

aoxiangchina的博客 1461

LNMP的安装

目录一.原理1.LNMP架构解读2.MySQL安装配置编译安装MySQL3.PHP解析环境的安装编译安装PHP二.安装步骤安装nginx安装数据库安装php网页调试 一.原理 1.LNMP架构解读 LNMP平台就是Linux、Ngnix、MySQL、PHP的组合架构,需要Linux服务器、MySQL数据库、PHP解析环境 2.MySQL安装配置 为了与Nginx、PHP环境保持一致,此处选择采码编译的方式安装MySQL组件 MySQL部署的方法 编译安装MySQL 优化调整 初始化数据库 启动MySQL服务

yan_0916的博客 2万+

centos7 使用YUM安装lnmp环境

centos7 YUM安装lnmp 安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等。 yum install epel-release 提示:EPEL,即Extra Packages for Enterprise Linux,企业版linux附加包。这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,所以如果你使用的是RHEL,或者CentOS,Scientific等

weixin_40288231的博客 475
上一篇: Linux查看进程内存状况
下一篇: TCMalloc
unix21
博客等级 码龄14年 115粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值