博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx
阅读量:4228 次
发布时间:2019-05-26

本文共 18561 字,大约阅读时间需要 61 分钟。

轻量级、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器

web服务器对比

Unix和Linux平台 Windows平台

--Apache、Nginx、Tengine、Lighttpd

--Tomcat、IBM WebSphere、Jboss

微软公司的IIS(Internet Information Server)

官网 

 

  • 一、部署

gcc pcre-devel openssl-devel        //安装依赖包

useradd -s /sbin/nologin nginx       #与配置中的user不同则重启服务报错
#如果与
tar  -xf   nginx-1.10.3.tar.gz
cd  nginx-1.10.3
 ./configure   \                   #当前位置进行配置                    
> --prefix=/usr/local/nginx   \                //指定安装路径
> --user=nginx   \                            //指定用户
> --group=nginx  \                            //指定组
> --with-http_ssl_module                        //开启SSL加密功能
make && make install    //编译并安装

/usr/local/nginx/sbin/nginx                   //启动服务

 /usr/local/nginx/sbin/nginx -s stop          //关闭服务
/usr/local/nginx/sbin/nginx -s reload        //不重启的情况下重新加载配置文件
/usr/local/nginx/sbin/nginx -V               //查看软件信息
 ln -s /usr/local/nginx/sbin/nginx /sbin/    //方便后期使用,软连接快捷方式

netstat 

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

netstat -nualtp | grep nginx

ps aux | grep nginx

src目录下的  .c结尾(c语言)功能划分
make 源玛编译为二进制
通过./configure --help 查看该软件支持的模块

 

]# firewall-cmd --set-default-zone=trusted

]# setenforce 0

测试首页文件

]# curl http://<server_IP>

 

  • 二、升级版本

[root@proxy ~]# tar  -zxvf   nginx-1.12.2.tar.gz#解新版本包

[root@proxy ~]# cd nginx-1.12.2                 #进入改目录       
[root@proxy nginx-1.12.2]# ./configure   \       #当前目录下配置
> --prefix=/usr/local/nginx   \  #安装路径不写默认在/usr/local/nginx  
> --user=nginx   \       #指定用户   
> --group=nginx  \       #指定组
> --with-http_ssl_module  #开启SSL加密功能
[root@proxy nginx-1.12.2]# make    #升级不用再进行安装 

curl http://192.168.4.5和火狐验证效果差不多

[root@proxy nginx-1.12.2]# mv /usr/local/nginx/sbin/nginx  \
>/usr/local/nginx/sbin/nginxold
#备份老程序
[root@proxy nginx-1.12.2]# cp objs/nginx   /usr/local/nginx/sbin/
#拷贝新版本
[root@proxy nginx-1.12.2]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
make: *** [upgrade] 错误 1>>kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

[root@proxy ~]# /usr/local/nginx/sbin/nginx –v           //查看版本

----------------------------------------------------------------------------------

  • 三、用户认证

 vim  /usr/local/nginx/conf/nginx.conf(nginx配置文件)

全局配置

(用户名,日志,进程)

http{

    server{
        listen 80;                             #端口
        server_name localhost;                 #域名

  auth_basic"认证提示符仅英文";

  auth_basic_user_file "/usr/local/nginx/pass"; #认证密码文件

        root html;                           #网站根路径(默认在安装位置)

       }
       server{
        listen 80;
        server_name www.xyz.com;
        root www;
       }
}

 httpd-tools软件包
htpasswd -c /usr/local/nginx/pass(新密码文件)用户名  # -c创建密码文件第一次使用,继续添加(追加)无需此选项。后面接密码文件路径+用户名,回车后输入密码,自动写入密码到文件

htpasswd -c /usr/local/nginx/pass   tom

前面已建快捷方式则直接nginx -s reload重新加载
---------------------------------------------------------------

基于域名的虚拟主机

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

.. ..
server {
        listen       80;                               //端口
        server_name  www.a.com;                       //域名
auth_basic "Input Password:";                        //认证提示符
auth_basic_user_file "/usr/local/nginx/pass";        //认证密码文件
location / {
       root   html;                                 //指定网站根路径
            index  index.html index.htm;
       }
       
}
… …
    server 
        listen  80;                                 //端口
        server_name  www.b.com;                    //域名
location / { 
root   www;                                 //指定网站根路径
index  index.html index.htm;
}
}

再建网站根路径mkdir  /usr/local/nginx/www

echo "www" > /usr/local/nginx/www/index.html
nginx -s reload

客户端测试
修改客户端主机192.168.4.10的/etc/hosts文件,进行域名解析
 vim /etc/hosts
192.168.4.5    www.a.com  www.b.com

 

  • 四、加密
  • 对称密钥

AES、 DES  应用案例:RAR,ZIP压缩加密(单机加密)

  • 非对称加密

RSA、 DSA  应用案例:网络加密(https,ssh)

 

  • Hash值

MD5, SHA256, SHA 512   应用案例:数据完整性校验,文件秒传

 

 

]# md5sum anaconda-ks.cfg 

81a24d454319c2a5b8b806828e370367  anaconda-ks.cfg
md5值与时间,名字,权限无关,与内容有关

RS ORS 

FS OFS
awk 'BEGIN{FS="--";OFS="***"}{print $1,$2,$3}' 1.txt

awk -F: -v x=$i'$1==$x{print $1“-->”$2}' /etc/passwd  

-v(引入外部变量)

/var/spool/cron/root(谁的任务就谁的文件名)计划任务路径

#!/bin/bash

while :
do
u=`awk '/Failed/{ip[$11]++}END{for(i in ip){print i","ip[i]}}' /var/log/secure`
for i in $u
do
n=`echo $i | awk  -F, '{print $1}'`
c=`echo $i | awk  -F, '{print $2}'`
if [$c -gt 3];then
firiewall-cmd --zone=block --list -all | grep -q $n
[ $? -eq 0 ];then || firewall-cmd --zone=blcok --add -source=$n
fi

done

sleep 5
done

1.基于端口的虚拟主机(参考模板)

server {

listen 8080; //端口

server_name web1.example.com; //域名

......

}

server {

listen 8000; //端口

server_name web1.example.com; //域名

.......

}

2.基于IP的虚拟主机(参考模板)

server {

listen 192.168.0.1:80; //IP地址与端口

server_name web1.example.com; //域名

... ...

}

server {

listen 192.168.0.2:80; //IP地址与端口

server_name web1.example.com;

... ...

}

  • 五、SSL虚拟主机

1.

[root@proxy ~]# cd /usr/local/nginx/conf
[root@proxy ~]# openssl genr > cert.key                //生成私钥
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem   
req请求做一个证书 -new新的  导出证书是x509格式  -key与私钥一致   (公钥)
>>>>输入证书信息
国家名称(2个字母代码):
省/市/自治区名称(全名):
地名(如城市)【默认城市】:
组织名称(如公司)【默认公司】:
组织单位名称(例如,部门):
公用名(例如,您的名称或服务器的主机名):
电子邮箱:

2.vim /usr/local/nginx/conf/nginx.conf

… …    
server {
        listen       443 ssl;
        server_name            www.c.com;      
        ssl_certificate      cert.pem;         #这里是证书文件
        ssl_certificate_key  cert.key;         #这里是私钥文件
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;        #超时时间(愿意等待多久)
        ssl_ciphers  HIGH:!aNULL:!MD5;  #!不能空密钥,不能md5加密
        ssl_prefer_server_ciphers  on;
以下为加密的网页        
location / {
            root   html;                     #根路径
            index  index.html index.htm;
        }
    }

3.重加载配置
验证 firefox htpps://www.c.com

-----------------------------------------------------------------------------------------
1.报错
nginx_http_module加密模块(安装时加--with-http_ssl_module)解决:升级或重装
2.使用ip,会打开默认网站(配置里第一个server)
3.做http,https
先检查协议,http直接找80端口,
firefox htpp://www.c.com --->相当于用ip访问,(原本是https)出现是默认server
会出密码帐号认证 ;加密和不加密的访问
4.firefox https://www.c.com
提示不信任,锁不是绿色
问题:利益(自己创建)
浏览器+合作企业

-----------------------------------------------------------------------------------------------------

动态网站页面:php,py,jsp(java),perl,bash    

/脚本属于动态(nginx将脚本给php[9000.多进程]执行完把结果给用户)
静态网站页面:jpg,mp4,doc,pdf,html...(扩展名)要啥直接给啥

  • LNMP 环境部署

Linux Nginx(脚本) Mysql(存储)  Php(执行/解释代码)
user <--->nginx:80<---->php执行代码、连接写入<---->mysql  #有来回

安装以下软件依赖包:

mariadb(数据库客户端软件)、              #端口:3306
mariadb-server(数据库服务器软件)、
mariadb-devel(其他客户端软件的依赖包)、
php(核心的解释器)、                                 
php-fpm(进程管理器服务)、systemctl start php-fpm   #端口9000
php-mysql(PHP的数据库扩展包),扩展模块
     mysql,oracle,sqlserver,
php多进程(取决于配置文件)
以内存容量情况来起进程
空间进程(提前启的进程)
重启并开机自启服务!!!!

php脚本

vim /usr/local/nginx/html/test.php
<?php  
$i=33;
echo $i;
?>

php 脚本名  #运行php脚本

查看即可不需修改

[root@proxy etc]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000            //PHP端口号
pm.max_children = 32                //最大进程数量
pm.start_servers = 15                //最小进程数量
pm.min_spare_servers = 5            //最少需要几个空闲着的进程
pm.max_spare_servers = 32            //最多允许几个进程处于空闲状态

-----------------------------------------------------------------------------

程序(program) 进程(process) 线程(thread)
1程序(硬盘上)----> 4进程(内存)-------->4线程(节约资源,进程死了线程全死)

动静分离
location匹配用户的地址栏,支持正则
从域名开始往后匹配www.a.com/...
精确匹配不加正则
正则匹配加~号例location ~/teat.
/ 的优先级低
例:

server {
listen 80;
server_name www.a.com;
location / {         #每个location相当于一个if
allow 192.168.1.1;  #只能被此ip访问
deny all;           #其他ip拒绝
root html;
}
location ~\.php${     #\转义.变为普通符,~为模糊匹配
root html;
}
}

firefox http://www.a.com/a.jpg
优先匹配除了/以外的地址栏
include  调用别的文件
fastcgi   快速公共网关接口协议(进程管理器)

动静分离vim /usr/local/nginx/conf/nginx.conf

静态
locatio / {                           #匹配地址栏 域名/
root html;
index  index.php  index.html index.htm;  默认首页,默认第一个
}
动态
location ~\.php${              #匹配地址栏 域名/后的.php结尾(会找相应的地址文件)
root  html;                   #网页文件路径
fastcgi_pass 127.0.0.1:9000;   #讲请求转发给本机9000端口,PHP解释器
fatcgi_index index.php;
#fastcgi_param   SCRIPT_FILENAME  $document_roo$fastcgi_script_name;
include  fastcgi.conf;       #nginx调用conf文件(里面是内置变量)
}

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

#请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

出错了参考日志

/usr/local/nginx/logs/error.log
/var/log/php-fmp/www-error.log
Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log
connection refused连接被拒绝
UV(几个ip)  PV(多少访问量)
wc -l access.log 

/etc/profile[定义变量]

创建PHP测试页面,连接并查询MariaDB数据库。

mysql(密码默认写在日志里)  mariadb(默认无密码)

vim /usr/local/nginx/html/mysql.php

<?php
$mysqli = new mysqli('localhost(解析为127.0.0.1)','root','密码','mysql');
//注意:root为mysql账户名称,密码需要修改为实际mysql密码,无密码则留空即可
//localhost是数据库的域名或IP,mysql是数据库的名称
if (mysqli_connect_errno()){
    die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
    printf("Host:%s",$row[0]);
    printf("</br>");
    printf("Name:%s",$row[1]);
    printf("</br>");
?>

1.安装LNMP   (user ---nginx ---php---mysql)

2.修改nginx.conf[动静分离]  nginx  ---  PHP
3.编写PHP脚本连接数据库(实现读写操作)
http://www.a.com/mysql.phlp
数据库永久存储PHP的变量
/etc/hosts/   只为本机解析

-----------------------------------------------------------------------------------------------------

  • 地址重写

地址栏http://wwww.a.com/........

rewrite regex replacement flag

rewrite 旧地址(支持正则表达式) 新地址 [选项]
rewite  跳转/保留
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;

rewrite /a.html  /b.html  redirect(地址栏跳转变化);     #地址重定向到b.txt         

location / {

    root   html;
index  index.html index.htm;
}
}

a.html和b.html本身没有需自建,访问/a.html自动调转到b.html.则a.html建不建看你喜欢,b.html需创建到根路径下(/usr/local/nginx/html/b.html)

重启后验证nginx -s reload

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
rewrite ^/ htpp://tmooc.com redirect;            
location / {
    root   html;
index  index.html index.htm;
}
}

server {
        listen       80;
        server_name  localhost;
rewrite ^/ htpp://tmooc.com redirect; 
#或 rewrite ^/(.*) htpp://tmooc.com/$1;  #()复制以/开头后面的所有内容到后面以$1占帖        
location / {
    root   html;
index  index.html index.htm;
}
}

--------------------------------------------------------------------------

nginx  正则 

基本正则 \{n,m\} \()优先学会
扩展正则 {} ()
perl正则 \b \w \d \s () ()--> $1 $2 与扩展正则()不一样,扩展正则以\1\2占帖
posix正则 [[:alpha:]] 所有字符    [[:num:]] 所有数字

ie(pc端浏览器) http://www.sina.com.cn(宽屏页面)
uc(手机浏览器) http://www.sina.com.cn(窄屏页面)
前端(网页美观)html,div,javascript(不是java)
后端(技术) php,java,python,perl

request    请求

referer    从哪里来
$http_user_agent的值   用户信息(用户代理)
"Mozilla(浏览器)/5.0 (X11; Linux(操作系统) x86_64; rv:52.0) Gecko/20100101 Firefox/52.0(浏览器/版本)"

tailf /usr/local/nginx/logs/access.log  #tailf 实时查看内容变化

192.168.4.10(对方ip) - tom(用户名) [18/Apr/2019:10:36:40 +0800] (时间,+0800东八区)"GET /(默认首页)favicon.ico(根页面下的) HTTP/1.1(协议)" 404(状态) 169 (页面有多大/字节)"-"(从哪里访问来的-为直接输地址栏搜) "Mozilla/5.0 (X11; Linux x86_64(操作系统); rv:52.0) Gecko/20100101 Firefox/52.0(浏览器/版本)"

~符号代表正则匹配,*符号代表不区分大小写实现curl和火狐访问相同链接返回的页面不同)

[root@proxy ~]# echo "I am Normal page" > /usr/local/nginx/html/test.html
[root@proxy ~]# mkdir   /usr/local/nginx/html/firefox/
[root@proxy ~]# echo "firefox page" > /usr/local/nginx/html/firefox/test.html
修改配置

server

...

if ($http_user_agent ~* firefox) {    

#如果用的是火狐则跳转页面到以下页面,客户端信息
rewrite ^/(.*)  /firefox/$1;#不管访问什么页面都给你跳到相同页面
 }
...
#或特殊情况rewrite / /test.html
rewrite /(.*)  /firefox/$1

如果访问域名后面不加test.html则自动跳到改页面,如果是火狐自动跳到firefox/test.html,不是则不跳

重新加载后验证。
firefox  http://192.168.4.5/test.html
curl     http://192.168.4.5/test.html
   

*****地址重写格式【总结】
rewrite 旧地址 新地址 [选项];
选项:

  • last 不再读其他rewrite
  • break 不再读其他语句,结束请求(其他location)
  • redirect 临时重定向
  • permament 永久重定向

rewrite /a.html  /b.html  last;匹配及停止。不读其他的rewrite只跳本次并继续执行其他语句
rewrite /a.html  /b.html  break;不读其他语句包括并结束请求(location)

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

  • Nginx反向代理

一、Nginx(web服务器)反向代理服务器

Nginx 功能

  • 1.调度
  • 2.负载均衡
  • 3.健康检查

1)部署web服务器

两台虚拟机安装http并写网页文件index.html
2)修改配置文件
Vim /local/nginx/conf/nginx.conf
...
http{
....
#添加服务器池,实现反向代理功能
Upstream webserver{
#使用upstream定义后端服务器集群(上游集群),集群名称任意
ip_hash;(server上面)
#配置upstream服务器集群的调度算法,通过ip_hash设置调度规则为相同客户端访问相同服务器
把客户端ip地址 hash一下
Server 192.168.2.100:80(默认80可以不写)  weight=1 max_fails=1 fail_timeout=20;
#使用server定义集群中的服务器和端口;配置upstream服务器集群池属性:weight设置服务器权重值默认值1。
Max_fails设置最大失败次数(测1次失败判为坏的);fail_timeout设置失败超时时间,单位秒(隔20秒再测)健康检查
Server 192.168.2.200;
#server 192.168.2.101 down; down标记服务器已关机,不参与集群调度

}
...
Server {
......
location / {
root html; #(优先级低)
Proxy_pass http://webserver;
#通过proxy_pass将用户的请求转发给webserver集群(pass自己不处理丢给集群)
}
}
====================================================
/usr/local/nginx/sbin/nginx -s reload   #重新加载
Curl http://192.168.4.5   #多次访问查看效果

ip_hash

详情http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash 
算法:echo “192.168.4.5” | md5sum  (16进制数0-9|a-f)%2(2台服务器)=0|1
数据不变hash值不变,通过值判断(一直)给哪个服务器
hash只看客户端IPv4地址的前三个八位字节或整个IPv6地址用作散列密钥
11  二进制 = 十进制3
11 七进制 = 十进制 8
11  60进制 = 十进制   61
11  365进制 = 十进制  366

User--->proxy------|--------web1

  (轮询 )代理           | ----------------web2
                   | --------ftp1
                   | --------ftp2

轮询:轮着转给服务器,如果要认证刷新又要输入密码

相同:相同客户端访问相同服务器
Nginx用什么就加什么模块
1.9版本前不支持--with-stream模块

二、Nginx的TCP/UDP调度器(其他代理)

1.部署支持4层TCP/UDP代理的Nginx服务器
重装软件或升级 yum –y install gcc pcre-devel openssl-devel        //安装依赖包
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \
> --with-http_ssl_module                         //开启SSL加密功能
> --with-stream                                 //开启4层反向代理功能

[root@proxy nginx-1.12.2]# make && make install     //编译并安装

修改/usr/local/nginx/conf/nginx.conf配置文件,添加服务器池,实现TCP/UDP反向代理功能
在http上面新增:
stream {
upsteam  nsd {  
server 192.168.2.100:22;(这里端口不是默认,ssh=22)
server 192.168.2.200:22;
}
server {
listen 12345;   #65535内的与其他端口不冲突的随随便一个,本机22端口已占用
这里不需加server_name
proxy_pass  nsd;  #本次不是做网页代理,

}

}
http {
.......

重新加载后验证ssh 192.168.4.5 -p 12345 #(-p端口,不加默认为22就直接默认连代理了)
Password:

which  nginx

在环境变量$PATH设置的目录里查找符合条件的文件。

Hash显示哈希表
-l    显示哈希表,包括路径
-r    清除哈希表
-p <path> <name>    向哈希表中增加内容
-t <command>    显示指定命令的完整路径

---------------------------------------------------------------------------、

三、自定义报错
200 一切正常
301 永久重定向
302 临时重定向
401用户名或密码错误
403禁止访问(客户端ip地址被拒绝)
404 文件不存在
414 请求URI头部过长
500 服务器内部错误
502 Bad Gateway

firefox http://192.168.4.5/xxxxx  #访问一个不存在的页面
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
error_page   404  /40x.html;    //自定义错误页面
.. ..
[root@proxy ~]# vim /usr/local/nginx/html/40x.html        //生成错误页面
Oops,No NO no page …
-----------------------------------------------------------------------------------------------------

四、如何查看服务器状态信息(非常重要的功能)
-with-http_stub_status_module开启状态页面模块
结合以上实验可选择升级或重装(proxy代理机上)
vim /usr/local/nginx/conf/nginx.conf    
新增一个location 
  location /status {
         stub_status  on;
     #     allow 192.168.4.5;#只有自己能看,需要则添加
     #     deny all;            
             }

...

http第七层协议(应用层)
tcp第4层协议(传输层)
a          与           b
3次握手--------connection建立连接
reust(jpg)发送图片请求   ->
<-         回应数据包reply
4次断开 --------- close
要1k图片  回60k(数据包 )
带宽利用率不高
一次连接一次请求

keepalive(会话保持,默认打开)作用:一次连接多次请求

超时时间x秒 (没超时则不断开连接) 执行4次断开
之后请求又3次握手
...

(client客户端访问)firefox http://192.168.4.5/status
与网络有关!!!
Active connections: 1   #当前活动连接数
server accepts(接受连接总数) handled(处理连接总数) requests(请求数)
 37 37 37 
Reading(正在读几个包): 0 Writing(正在写回应的包): 1 Waiting(几个人等待状态): 0 
nginx重启所有数重置

ss  查看系统中启动端口的信息
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选项一样。

模拟测试网站并发量,逻辑要符合,不能100人共访问90次

ab -n(访问总次数) -c (人)  URL          
ab -n 2000 -c 2000 http://192.168.4.5/   #2000人共访问2000次网页(网站尾加/)

性能问题,优化并发量

vim /local/nginx/conf/nginx.conf

worker_processes  1;         #与CPU内核数量一致

...
events {
    worker_connections  65535;  #最大连接数(并发量)可高点写,实际达不到
     use epoll;        #处理模型,nginx默认有可以不写(只负责查);apche默认select(一个一个找)
}

nginx -s reload

五、优化内核参数(最大文件数量)
ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3845
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024#
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3845
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

[root@proxy ~]# ulimit -Hn 100000 #H(hard)硬/强制,设置硬限制(临时规则)
[root@proxy ~]# ulimit -Sn 100000 #S(soft)软/不强制,设置软限制(临时规则)
[root@proxy ~]# vim /etc/security/limits.conf
    .. ..新增行
#用户或组     硬限制或软限制    需要限制的项目   限制的值
*               soft    nofile            100000
*               hard    nofile            100000

测试

ab -n 5000 -c 5000  http://192.168.4.5/

nginx[静态/动态]影响并发量因素的:
静态1.读硬盘disk(的IO速度) ,net NIC网卡带宽   10M/s   两个设备一协商取最小值
动态2.disk IO速度 , net NIC ; CPU性能   ; 代码程序写的好不好

六、优化nginx数据包头缓存

[root@proxy ~]# vim lnmp_soft/buffer.sh 
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
    URL=${URL}v$i=$i
done
curl $URL               //经过5000次循环后,生成一个长的URL地址栏
  
一运行脚本就提示头部信息过大

修改配置文件nginx

vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;      //生产环境16k差不多,大请求包头部信息的缓存个数与容量
.. ..
server
...
}

优化后,使用脚本测试长头部请求是否能获得响应

七、浏览器本地缓存静态数据

火狐浏览器地址栏输入about:cache

disk
List Cache Entries

Number of entries:     29

Maximum storage size:     358400 KiB
Storage in use:     34 KiB
Storage disk location:     /root/.cache/mozilla/firefox/kug2f43d.default/cache2 
Expires -- 缓存到期时间

1.清理本地缓存

2.修改nginx配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires        30d;            //定义客户端缓存时间为30天
}

cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html 
#复制图片过取测试缓存信息
firefox http://192.168.4.5/day.jpg
再查看about:cache的Expires变化

八、日志切割

日志文件越来越大如何切割?

1.把旧的日志重命名
2.看kill USR1 PID(nginx进程pid)
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

cd /usr/local/nginx/logs

mv access.log  access.log.bak
cat nginx.pid
kill USR1 pid   #发送信号给某个进程
kill(发信号) -15   进程  #发信号15给进程

3.设置计划任务
 vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)

[root@proxy ~]# crontab -e

03 03 * * 5  /usr/local/nginx/logbak.sh

--------------------------------------------------------------------------------------
九、对网页进行压缩
        10/s
a  --------------> jd.com(30M) 
        10/s
a  --------------> jd.com(30M) --压缩--(28M)
所有浏览器自带解压

gzip压缩免费,RAR压缩收费
小文件压缩越压越大(不建议压小文件)
压缩比率默认居中
多媒体文件(jpg,png,avi,mo3,mp4)本身就已压缩过了
文本文档 .txt  .html  .css pdf xls   适合压缩(效果明显)
对特定文件压缩,类型参考 vim  /usr/local/nginx/conf/mime.types
类型                                            扩展名
audio/mpeg                            mp3;

[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf

http {
.. ..
gzip on;                            //开启压缩
gzip_min_length 1000;                //小文件不压缩
gzip_comp_level 4;                //压缩比率
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
                                    //对特定文件压缩,类型参考mime.types
.. ..
}

十、服务器内存缓存
如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快。
http { 
open_file_cache          max=2000  inactive=20s; 
#设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄,无人访问就关
 open_file_cache_valid    60s;  60秒过后不管怎样都清掉
  open_file_cache_min_uses 5;    页面访问次数超过5次才被缓存(热点缓存)
open_file_cache_errors   off;   缓存出错不报警(error日志里不缓存)
}

以上操作围绕lnmp_soft.tar.gz

---------------------------------------------------------------------------------------------------

网页文件参考
<html>
<head><title>VM</title></head>
<body bgcolor=white>
<center><h1>敌军还有五秒到达Web1</h1></center>
<hr><center>王者营地</center>
</body>
</html>

 

 

 

转载地址:http://xhiqi.baihongyu.com/

你可能感兴趣的文章
CSDN博客之星 投票说明
查看>>
Oracle wallet 配置 说明
查看>>
Oracle smon_scn_time 表 说明
查看>>
VBox fdisk 不显示 添加的硬盘 解决方法
查看>>
Java多态性理解
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>