当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪MongoDB 内存使用情况分析       MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库.........
    ▪Apache遇到的问题 APR not found问题的解决方法       #./configure --prefix……检查编辑环境时出现: checking for APR... no configure: error: APR not found .  Please read the documentation. 可以用./configure –help | grep apr 查看帮助。 --with-included-apr     Use bundled copies.........
    ▪linux服务器下LNMP安装与配置方法       Nginx与apache、lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-.........

[1]MongoDB 内存使用情况分析
    来源: 互联网  发布时间: 2013-12-24

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

先 ps 一下看看。

代码如下:

$ ps aux|grep mongod
mongo    26994  9.0 20.0 797264324 13243052 ?  Sl   May16 117:03 /path/to/mongodb/bin/mongod

总共 760G 多的虚拟内存,但是物理内存就只有 12.6G 。这个机器可是有 64G 内存的哦,这看起来 MongoDB 完全没用多少内存嘛。

再看看 free 的结果。

代码如下:

$ free -m
             total       used       free     shared    buffers     cached
Mem:         64544      64279        265          0        134      60413
-/+ buffers/cache:       3731      60813
Swap:        31999          0      31999

内存倒是占得差不多了,基本都是 cached ,也就是文件系统缓存。MongoDB 是通过 mmap 方式让操作系统来处理持久化和缓存的。每个数据文件都直接映射到某个虚拟内存地址。访问的时候如果这一页不在内存中,系统就会尝试把这一页加载进来。这些内存都是算进 cache 里的。在 mongodb 的官方文档里有这样一个说法,top 或 ps 里的 RSIZE 段显示的是机器的全部内存大小,因为 mongodb 会尽可能占用全部内存。但是事实上,这些缓存并没有算在里面。因此在 top 或 ps 中是看不出 MongoDB 的实际内存使用情况的。而 free 虽然可以看到系统的内存使用情况,但是没法确定这些内存里究竟有多少真的是 MongoDB 使用的。

还好有人做了 vmtouch 这个工具。可以检查文件在缓存中的情况,另外也可以把文件直接加载进缓存或者踢出去。只需要对 MongoDB 的所有数据文件检查一下缓存加载情况,就可以知道 MongoDB 到底缓存了多少数据了。

代码如下:

$ vmtouch -m4G /path/to/mongodb/data/
           Files: 256
     Directories: 3
  Resident Pages: 15465901/100219772  58G/382G  15.4%
         Elapsed: 4.072 seconds

这里 -m4G 是 vmtouch 检查的文件大小限制。MongoDB 的数据文件比较大,通常会超过默认的 500M。这样看来,缓存用了 58G,这还差不多。Resident Pages 左侧的数字是页的数量,页的数量乘以文件系统页大小才是内存使用量。页的大小可以通过

代码如下:

getconf PAGESIZE

查看,通常是 4096,也就是 4KB。

MongoDB 在 NUMA 的机器上运行,并且内存被固定到一个 node 的时候,会有一个警告

代码如下:

WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –interleave=all mongod [other options]

也许是认为,这种情况下只能用上一个节点的内存。但 MongoDB 的缓存是由操作系统管理的。NUMA 似乎对此并没有影响。而内存不太小的时候 MongoDB 本身很难用掉一个节点的内存。这种情况下,是否开启 numactl –interleave=all 作用已经不大了。能做的也许只能是加内存,sharding,或者换 ssd 了。

出处:http://xiezhenye.com/2013/05/mongodb-%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8.html


    
[2]Apache遇到的问题 APR not found问题的解决方法
    来源: 互联网  发布时间: 2013-12-24

#./configure --prefix……检查编辑环境时出现:

checking for APR... no configure: error: APR not found .  Please read the documentation.

可以用./configure –help | grep apr 查看帮助。 --with-included-apr     Use bundled copies of APR/APR-Util --with-apr=PATH         prefix for installed APR or the full path to apr-config --with-apr-util=PATH    prefix for installed APU or the full path to 安装APR(Apache Portable Runtime ) 下载:http://apr.apache.org/download.cgi

#cd /tmp/52lamp/ //源码存放位置 #tar -zxvf apr-1.4.2.tar.gz //unzip -o apr-1.4.2.zip #cd apr-1.4.2 #./configure #make #make install

再次检查编译环境出现

checking for APR-util... no configure: error: APR-util not found .  Please read the documentation.

#./configure –help | grep apr-util --with-apr-util=PATH    prefix for installed APU or the full path to

下载:http://download.chinaunix.net/download/0001000/472.shtml #tar -zxvf apr-util-1.3.9.tar.gz #cd apr-util-1.3.9 #./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr #make #make install

./configure仍提示APR-util not found,增加--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util后出现 configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

#./configure –help | grep pcre --with-pcre=PATH        Use external PCRE library

下载:http://sourceforge.net/projects/pcre #unzip -o pcre-8.10.zip #cd pcre-8.10 #./configure --prefix=/usr/local/pcre #make #make install

继续安装Apache/httpd,./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre,这个问题就解决了

注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会报告给用户。但可以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错误。

#echo $? 0

#make #make install

复制Apache启动文件 #cp /usr/local/httpd/bin/apachectl /sbin/

启动Apache #apachectl start

设置Apache开机自启动 #vi /etc/rc.d/rc.local 增加一行 /sbin/apachectl start

或者将httpd服务添加到ntsysv服务管理工具 #apachectl stop //关闭Apache以免不必要的麻烦 #cp /usr/local/httpd/bin/apachectl /etc/rc.d/init.d/httpd #vi /etc/rc.d/init.d/httpd 修改为 #!/bin/sh # #chkconfig: 345 85 15 //#不能省略,注意空格 #description: httpd for 52lamp 20101016 21:54 //任意字符串 # ......

第二行中345的含义: #       0 - operation completed successfully #       1 - #       2 - usage error #       3 - httpd could not be started #       4 - httpd could not be stopped #       5 - httpd could not be started during a restart

修改有关权限 #cd /etc/rc.d/init.d/ #chmod a+x httpd #chkconfig --add httpd

#ntsysv httpd已经在列表中,按F1可以看到刚才编写的服务描述httpd for 52lamp 20101016 21:54。

#apachectl start #ps -e |grep httpd 23247 ?        00:00:00 httpd 23248 ?        00:00:00 httpd 23249 ?        00:00:00 httpd 23251 ?        00:00:00 httpd 23252 ?        00:00:00 httpd

在浏览器中输入127.0.0.1,看起来一切正常;但是局域网内其他电脑不能访问!

#service iptables stop

如果不想关闭防火墙,放开80端口即可。

#vi /etc/sysconfig/iptables 增加一行-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT #service iptables restart //重启防火墙

现在一切OK


    
[3]linux服务器下LNMP安装与配置方法
    来源: 互联网  发布时间: 2013-12-24
Nginx与apache、lighttp性能综合对比,如下图:



注意:关闭rpm默认安装的apache和mysql

1.准备php函数的rpm包

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

2.准备lnmp其他的源代码包

wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz
wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
wget http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
wget http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz

3.安装php-5.2.14源代码包所需要的函数支持包

代码如下:

tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make
make install
cd ../

(libiconv库为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换)

代码如下:

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../

(libmcrypt是加密算法扩展库。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法。)

代码如下:

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.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -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.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -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.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
./configure
make
make install
cd ../

4. 编译安装MySQL 5.5.3-m3

代码如下:

groupadd mysql
useradd -g mysql mysql

tar zxvf mysql-5.5.3-m3.tar.gz
cd mysql-5.5.3-m3
./configure --prefix=/usr/local/mysql --without-debug --enable-thread-safe-client --with-pthread --enable-assembler --enable-profiling --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-extra-charsets=all --with-plugins=all --with-mysqld-user=mysql --without-embedded-server --with-server-suffix=-community --with-unix-socket-path=/tmp/mysql.sock
Make
#编译
Make install
#安装
Cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
#准备mysql配置文件
Vi /etc/my.cnf
[client]
default-character-set=utf8
#修改客户端和连接字符集
[mysqld]
character-set-server=utf8
#修改服务器和数据库字符集
collation-server = utf8_general_ci
#修改服务器校验字符集                   登陆mysql后可以\s查看字符集

Setfacl -m u:mysql:rwx -R /usr/local/mysql
Setfacl -m d:u:mysql:rwx -R /usr/local/mysql
#设置权限
/usr/local/mysql/bin/mysql_install_db --user=mysql
#安装mysql和test数据库
/usr/local/mysql/bin/mysqld_safe --user=mysql &
#启动mysql服务
/usr/local/mysql/bin/mysqladmin -uroot password  123
#修改mysql登录密码为123
/usr/local/mysql/bin/mysql -uroot -p123
#用mysql登录

5. 编译安装PHP(FastCGI模式。使用fastCGI管理php,加快php解析速度)

代码如下:

tar zxvf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
#-p  1    是数字
#解压并打补丁,让php支持fpm来方便管理php-cgi进程(使用php-fpm管理fastCGI)
# gzip   -c  保留源文件   -d  解压
cd php-5.2.14/
./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-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-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap
make ZEND_EXTRA_LIBS='-liconv'
#编译过程设定变量(编译过程需要)
make install
cp /lnmp/php-5.2.14/php.ini-dist  /usr/local/php/etc/php.ini
cd ../

6.准备编译安装PHP5扩展模块

代码如下:

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
cd ../
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make
make install
cd ../
(eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍)
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
cd ../
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2/
./configure
make
make install
cd ../
(ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式)
tar zxvf imagick-2.3.0.tgz
cd imagick-2.3.0/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
cd ../

7. 修改php.ini文件,让php模块生效

代码如下:

vi /usr/local/php/etc/php.ini
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
再查找  ; cgi.fix_pathinfo=0
修改为cgi.fix_pathinfo=0,防止Nginx文件类型错误解析漏洞

8. 在php.ini中配置eAccelerator加速PHP

代码如下:

mkdir -p /usr/local/eaccelerator_cache
#准备eaccelerator缓存目录

vi /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"

9.准备php-cgi和nginx进程执行者用户

useradd nginx

10. 创建php-fpm配置文件- php-fpm.conf

vi /usr/local/php/etc/php-fpm.conf
<value name="display_errors">0</value>
#0改成1,页面上会输出错误日志.   取消注释
unix user of processes
      <value name="user">nginx</value>
      Unix group of processes
      <value name="group">nginx</value>                        取消注释

 <value name="max_children">128</value>
#最大子进程数128,如果内存小于2G,则64个最佳
<value name="rlimit_files">65535</value>
# Set open file desc rlimit,同时打开的文件数,linux系统允许同时打开的文件数为1024,修改linux系统中允许同时打开的文件,ulimit -SHn 65535,而且这个参数重启后还能生效,加到 /etc/profile全局配置文件的最后,开机就会生效,ulimit -a查看open files 65535
       ulimit  用户控制shell启动进程所占用的资源
              -H   设定硬性资源限制,也就是管理员设定的限制
              -S    设定软性资源限制,弹性限制
              -n    设定可同时打开的最大文件个数
              -f     设定单个文件最大大小
              -a    查看目前的限制
<value name="max_requests">1024</value>
#最大请求数, How much requests each process should execute before respawn.一个子进程能够回应1042个请求

11. 启动php-cgi(fastcgi)进程,监听127.0.0.1的9000端口,进程数为128(如果服务器内存小于3GB,可以只开启64个进程),用户为nginx:

代码如下:

/usr/local/php/sbin/php-fpm start
#启动php-cgi
/usr/local/php/sbin/php-fpm reload
#重新加载配置文件
/usr/local/php/sbin/php-fpm stop
#关闭php-fpm,此时nginx肯定连不上php

12. 安装Nginx所需的pcre库

代码如下:

tar zxvf pcre-8.10.tar.gz
cd pcre-8.10/
./configure
make && make install
cd ../

13. 安装Nginx

代码如下:

tar zxvf nginx-0.8.46.tar.gz
cd nginx-0.8.46/
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../

14. 修改Nginx配置文件

代码如下:

vi /usr/local/nginx/conf/nginx.conf
user  nginx nginx;
worker_processes 1;
#相当于cpu个数
error_log  logs/nginx_error.log;
#错误日志
pid        /usr/local/nginx/nginx.pid;
#主进程PID保存文件
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
#文件描述符数量
events
{
  use epoll;
#网络I/O模型,建议linux使用epoll,FreeBSD使用kqueue
  worker_connections 65535;
#最大允许连接数
}
http
{
  include       mime.types;
  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 on;
  tcp_nopush     on;
#tcp延迟
  keepalive_timeout 65;
#保持连接时间

  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;
#fastcgi设置
  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  192.168.150.253;
#主机名,或IP。如果是主机名,要能够DNS解析

location / {
root  html;
#网站主目录。/usr/local/nginx/html/
index index.html index.htm index.php;
#默认网页顺序
}

    #limit_conn   crawler  20;   

    location ~ .*\.(php|php5)?$
#~:匹配       后面正则表达式:.*任意字符  \.点 php或php5结尾。碰到网页文
件名是.php或.php5结尾
    {    
root  html;
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
#连接fastcgi,用来解析php语句
      fastcgi_index index.php;
#首页为index.php
   #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
#启动fast-cgi,可以在每个服务中启动,也可以放入/usr/local/nginx/conf/fastcgi_params,每个server都可以享用
      include fastcgi_params;
#包括fastcgi_params中参数
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      expires      30d;
#图片格式缓存30天
    }
    location ~ .*\.(js|css)?$
    {
      expires      1h;
#js/css缓存2小时
    }   
    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  /data1/logs/access.log  access;
      }
}

15. 在/usr/local/nginx/conf/目录中创建fastcgi_params文件

代码如下:

Vi  /usr/local/nginx/conf/fastcgi_params         (与配置文件中,只写一个就好)
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;


#建议把fastcgi_param写到nginx.conf中而不是把它写到fastcgi_params配置文件中,否则配置不够灵活,比如后面默认php设置和alias php设置中,他们的php页面的系统地址是不同的,比如:
默认php文件->/usr/local/nginx/html/index.php
Alias php文件->/mnt/bbs/index.php
这个时候你会发现fastcgi_params中的SCRIPT_FILENAME的值是相同的,这样会导致alias php的页面出不来,而配置在nginx.conf中各自配置各自的php系统地址,这样比较灵活.

#如果你觉得每个连接php的配置中都要加这一句话有点冗余,那就把它加入到fastcgi_params文件中,这样只需要加一次,其他所有的nginx.conf中的有关连接fastcgi的一块就不用加fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name这一句话了.

16.配置开机启动nginx,php-fpm,ulimit

1)nginx
Vi /etc/rc.local
/usr/local/nginx/sbin/nginx
2)php-fpm
Vi /etc/rc.local
/usr/local/php/sbin/php-fpm start
3)ulimit
Vi /etc/profile
ulimit -SHn 65535
4)mysql
Vi /etc/rc.local
/usr/local/mysql/bin/mysqld_safe  --user=mysql  &

17.检查nginx配置文件语句错误
/usr/local/nginx/sbin/nginx -t

18.平滑重启nginx进程
1)Pkill -HUP nginx
2)kill -HUP `pgrep -uroot nginx`
   Pgrep  -uroot  nginx  取出nginx主进程PID
3)/usr/local/nginx/sbin/nginx -s reload

19. 编写每天定时切割Nginx日志的脚本

1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh
vi /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/nginx.pid`

2、设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh

20.配置nginx虚拟主机

Sina和sohu域名事先解析

代码如下:

Vi /usr/local/nginx/conf/nginx.conf
==èwww.sina.com公司网站
server {
        listen       80;
        server_name  www.sina.com;
        access_log  logs/sina.access.log  main;
        location / {
            root   /web/sina;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           /web/sina;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
==èwww.sohu.com公司网站

server {                              
        listen       80;
        server_name  www.sohu.com;
        access_log  logs/sohu.access.log  main;
        location / {
            root   /web/sohu;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           /web/sohu;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
        #   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

最后在客户端测试虚拟主机www.baidu.com和www.sina.com两家公司网站

21.列表页显示
location / {
            autoindex on;           #打开列表页
            root   html;
            index  index.html index.php index.htm;
         }

22.虚拟目录设置
location /bbs{
                alias /mnt/bbs/;
        }
#这样配置html静态文件是可以出来的,但是php动态页面出不来,而且会浏览器的页面上会显示" No input file specified. "的报错,其实是php系统文件地址( SCRIPT_FILENAME)找不到,也就是说fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;中的$document_root$fastcgi_script_name不是真正的/mnt/bbs/index.php的地址,这可怎么解决:
location /bbs {
            alias /mnt/bbs/;
            index bbs.php index.html index.php;
        }
        location ~ ^/bbs/ {
            root /mnt/;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
                     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            log_format  bbs  '$document_root$fastcgi_script_name ';
            access_log logs/bbs.access.log bbs;
        }
#后面两行是关于日志的,就是为了更好的观察由nginx提交给fastcgi的php的系统地址SCRIPT_FILENAME,在这里我用$request_filename来给SCRIPT_FILENAME赋值,在日志中的结果为/mnt/bbs/index.php,在这里我发现一个问题就是$request_filename中的root设置为/mnt,否则$request_filename的值为:/mnt/bbs/bbs/index.php.

由以上可以得到一个结论,就是默认php设置也可以这样设置关于SCRIPT_FILENAME:
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            log_format  php  '$document_root$fastcgi_script_name ';
            access_log logs/php.access.log php;
        }
#此时从日志中可以看到,$request_filename的值为/usr/local/nginx/html/index.php,而以前默认的/scripts$fastcgi_script_name显然是错的php系统地址,日志中显示为/scripts/index.php
23.nginx状态监控
location /nginxstatus{
        stub_status on;
        access_log  off;
        }
#客户端访问网址:http://www.baidu.com/nginxstatus

24.rewrite正则过滤
location ~ \.php$ {
        proxy_pass   http://127.0.0.1;
        }
Rewrite指令最后一项参数为flag标记,支持的flag标记如下:
Last 标示完成rewrite规则
Break 不再匹配后面的规则
Redirect 302临时重定向
Permanent 301永久重定向
Last和break用来实现uri重写,浏览器地址栏的url地址不变,但在服务器访问的路径发生了变化,redirect和permanent用来实现url跳转,浏览器地址栏会显示跳转后的url地址,使用alias指令时必须使用last标记,使用proxy_pass指令时要使用break标记,last标记在本条rewrite规则执行完毕后,会对其所在的server{}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配,不再匹配后面的规则.

在匹配的过程中,nginx将首先匹配字符串,然后再匹配正则表达式,匹配到第一个正则表达式后,会停止搜索,如果匹配到正则表达式,则使用正则表达式的搜索结果,如果没有匹配到正则表达式,则使用字符串的搜索结果.
可以使用前缀"^~"来禁止匹配到字符串后,再去检查正则表达式,匹配到url后,将停止查询.
使用前缀"="可以进行精确的url匹配,如果找到匹配的uri,则停止查询,例如"location=/",只能匹配到"/",而"/test.html"则不能被匹配.
正则表达式的匹配,按照它们在配置文件中的顺序进行,写在前面的优先.
Location = / {
       #仅仅匹配 /
    [configuration A]
}
Location / {
       #匹配任何以/开头的查询,但是正则表达式及较长的字符串(/bbs/)将被优先匹配.
    [configuration B]
}
Location ^~ /images/ {
       #匹配任何以/images/开头的字符串,并且停止搜索,所以正则表达式将不会被检查.
    [configuration C]
}
Location ~* \.(gif|jpg|jpeg)$ {
       #匹配以.gif、.jpg、.jpeg结尾的任何请求,但是,/images/内的请求将使用configuration c的配置
       [configuratoin D]
}
请求处理匹配结果示例:
/ -> configuration A;
/documents/document.html -> configuration B;
/images/1.gif -> configuration c;
/documents/1.jpg -> configuration D;

例1:域名跳转
输入www.sina.com,跳转到www.sohu.com
    server {
        listen       80;
        server_name  www.sina.com;
        access_log  logs/sina.access.log  main;
        location / {
            root   /web/sina;
            index  index.html index.htm;
                     if (-e $request_filename){
                            # -e   是否存在
            rewrite  ^/  http://www.sohu.com/  permanent;
                            # ^/  域名以/开头。//www.sina.com    ,也可以写为.* 任意都跳转
                     }
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
server {
        listen       80;
        server_name  www.sohu.com;
        access_log  logs/sohu.access.log  main;
        location / {
            root   /web/sohu;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        }

例2:静态index.html跳转到动态index.php文件
cd  /web/sina/
vi  index.php
       <?
        print_r ($_GET);
?>
       Vi  nginx.conf
           server {
        listen       80;
        server_name  www.sina.com;
        access_log  logs/sina.access.log  main;
        location / {
            root   /web/sina;
            index  index.html index.htm;
            rewrite  ^/index(\d+).html  /index.php?id=$1  last;
# ^/ 以/开头。\d+ 多个数字。()第一个变量。     /index.php?id=$1 把第一个变量赋予id变量,传入index.php文件
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           /web/sina;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

在客户端输入:http://www.sina.com/index2.html
                     会跳转到index.php,把2当变量传入index.php程序

25.代理负载均衡技术(反向代理)
upstream myweb1 {
       #定义地址池       

192.168.190.190      

   
反向代理

upstream myweb1 {

            server 192.168.190.190:80;   
            server 192.168.190.191:80;

}

 

        server {

            listen       80;

            server_name  www.sohu.com;

            location / {

                proxy_pass http://myweb1;

                proxy_set_header Host     $host;

                proxy_set_header     X-Forwarded-For $remote_addr;

            }

        }

        
        server 192.168.244.10:80;

        server 192.168.244.11:80;
}
    server {
        listen       80;
        server_name  www.sohu.com;

            

192.168.190.191

        
                            #使用www.sohu.com访问

location / {
proxy_pass http://myweb1;
              #使用地址池
proxy_set_header Host $host;
              #利用HOST变量向后端服务器传递需要解析的客户端访问的域名(传递域名)
proxy_set_header X-Forwarded-For $remote_addr;
              #$remote_addr 把客户端真实IP赋予X-Forwarded-For。后端服务器才能获取真实的客户端IP。以便记录日志,要不日志中记录的访问信息都是负载服务器,而不是客户端(传递IP)
}
}

 
26.模块设置
Error_log
#错误日志
Include
#包含子配置文件,0.6版本以后子配置文件放在nginx.conf所在的路径下
Pid
#主进程id号
User
#nginx nginx表明nginx进程的执行者和组
Worker_processes
#与cpu个数相同,4核cpu为4
Worker_rlimit_nofile 65535
#打开的文件描述符,不过提前得设置ulimit -SHn 65535,即linux允许的打开文件个数
Worker_connectiones 65535
#客户端最大连接数65535
Alias
#虚拟目录
Error_page
#404,500错误跳转页面
Index
#index index.html,设置默认首页
Keepalive_timeout
#即tcp持续连接超时时间
Limit_rate
#limit _rate 100k,即限速为100KB/s
Limit_rate_after
#limit_rate_after 1m,即下载文件超过1m,则进入limit_rate限速阶段
Listen
#listen 192.168.100.1:80,即设置ip和端口
Location
#该指令允许对不同的uri进行不同的配置,可以是字符串、正则表达式
Resolver
#resolver 8.8.8.8,为nginx设置dns域名指向
Root
#设置网站根目录
Send_timeout
#超时时间是指进行了两次tcp握手,还没有转为established状态的时间,如果超过这个时间,客户没有响应,nginx则关闭连接,可以用来防止ddos攻击
Sendfile
#启用或禁用sendfile()函数,作用于拷贝两个文件描述符之间的操作函数,这个拷贝是在内核中操作的,比read和write拷贝高效得多
Server
#普通web配置或虚拟主机的配置的区域
Server_name
#根据客户端请求header头信息中的host域名,来匹配该请求应该由哪个虚拟主机配置或服务器的ip
Tcp_nodelay
#封装tcp/ip数据包的等待时间,也叫纳格算法,在keepalive开启才有用
Tcp_nopush
#要求sendfile开启的时候才起作用,设置该选择的原因是nginx在linux上,试图在一个包中发送它的httpd应答头
Allow
#allow 192.168.100.254,只允许192.168.100.254访问
Deny
#deny all,拒绝其他任何人访问
Autoindex
#autoindex on,即开启列表页功能
Charset
#charset utf8;source_charset gbk,把服务器上的gbk网页编码转换成utf8输出给客户端
Fastcgi_pass
#fastcgi_pass   127.0.0.1:9000;
#fastcgi_index  index.php;
#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#include        fastcgi_params;
#fastcgi_pass后跟的是php-cgi进程的ip和端口
Access_log
#正确日志
Proxy_pass
# proxy_pass http://myweb1,即后跟的是nginx代理负载池upstream中的服务器
Proxy_set_header
# proxy_set_header Host $host,设置把$host带给后端的nginx服务器
Proxy_temp_path
#用户指定一个本地目录缓冲较大的代理请求,类似于client_body_temp_path
Stub_status
# stub_status on,即开户状态监控
Image_filter
#它指定适用于图片的转换类型



















    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
技术文章 iis7站长之家
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3