赞
踩
目录
1.关闭防火墙,将安装 ngnix 所需的软件包上传到 /opt 目录下
2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
一个Nginx服务器在不做任何配置的情况下并发量可达1000左右。在硬件条件允许的前提下,Nginx可以支持高达5-10万的并发量(除了Nginx的设置外,Linux主机需要做大量的设置来配合Nginx)。
对比一下Tomcat。Tomcat服务器默认的并发量为150(不做任何配置)。即,当有超过150个用户同时访问某Servlet时,Tomcat的响应就会变得非常慢
官方给出的测试结果,10000个非活跃连接,在Nginx中仅消耗2.5M内存。对于一般性的DoS攻击来说就不是事儿,但对于DDoS也会是问题
可以在7*24小时不间断服务的前提下,进行Nginx版本的平滑升级,Nginx配置文件的平滑修改。即在不停机的情况下升级Nginx,修改替换Nginx配置文件。
Nginx之所以可以实现高并发,是因为其具有很多工作进程worker。当这些工作进程中的某些出现问题停止工作时,并不会影响整个系统的整体运行。因为其它worker会接替那些出问题的线程
Nginx只所以现在的用户很多,是因为很多功能都已经开发好并模块化。若需要哪些功能,只需要安装相应功能的扩展模块即可。根据编写扩展模块所使用的语言的不同,可以划分为两类:C语言扩展模块与LUA脚本扩展模块。
- Nginx是一个基于`事件的`Web服务器,Apache是一个基于`流程的`服务器;
- Nginx`所有请求都由一个线程处理`,Apache`单个线程处理单个请求`;
- Nginx`避免`子进程的概念,Apache是`基于`子进程的;
- Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
- Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
- Nginx支持`热部署`,Apache`不支持热部署`;
- Nginx对于静态文件处理`具有更高效率`,Apache相对一般;
- Nginx在`反向代理场景具有明显优势`,Apache相对一般。
- nginx配置简洁, apache较复杂
- 总的来说,apache依然是大部分公司的首选。
apache相对于nginx的优点∶
nginx相对于apache的优点∶
注:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。
I/O在计算机中指Input/Output,lOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的IO请求数量为单位,I/O请求通常为读或写数据操作请求。
一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。
获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
返回数据,服务器将已构建好的响应再通过内核空间的网络I/0发还给客户端(5-7)
关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。
阻塞: blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。
非阻塞: nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
-
- cd /opt
- nginx-1.24.0.tar.gz
nginx 的配置及运行需要 pcre、zlib 等软件包的支持,因此需要安装这些安装的开发包,以便提供相应的库和头文件
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
useradd -M -s /sbin/nologin nginx
- cd /opt
- tar zxvf nginx-1.24.0.tar.gz -C /opt/
-
- cd /opt/nginx-1.24.0/
- ./configure \
- --prefix=/usr/local/nginx \
- --user=nginx \
- --group=nginx \
- --with-http_stub_status_module
-
- #上面命令每行相关解释
- cd nginx-1.24.0/
- ./configure \
- --prefix=/usr/local/nginx \ #指定nginx的安装路径
- --user=nginx \ #指定用户名
- --group=nginx \ #指定组名
- --with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
-
- make && make install
-
- ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令

- nginx -t #检查配置文件是否配置正确
- nginx #启动nginx
- cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
- kill -3 <PID号>
- kill -s QUIT <PID号> #停止相关进程
- killall -3 nginx
- killall -s QUIT nginx
-
- kill -1 <PID号> #重载
- kill -s HUP <PID号>
- killall -1 nginx
- killall -s HUP nginx
- #日志分隔,重新打开日志文件
- kill -USR1 <PID号>
- #平滑升级
- kill -USR2 <PID号>

- vim /etc/init.d/nginx
- #!/bin/bash
- # chkconfig: - 99 20
- # description: Nginx Service Control Script
- COM="/usr/local/nginx/sbin/nginx"
- PID="/usr/local/nginx/logs/nginx.pid"
- case "$1" in
- start)
- $COM
- ;;
- stop)
- kill -s QUIT $(cat $PID)
- ;;
- restart)
- $0 stop
- $0 start
- ;;
- reload)
- kill -s HUP $(cat $PID)
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
- esac
- exit 0

- chmod +x /etc/init.d/nginx
- chkconfig --add nginx #添加为系统服务
- systemctl stop nginx
- systemctl start nginx
- vim /lib/systemd/system/nginx.service
- [Unit]
- Description=nginx
- After=network.target
- [Service]
- Type=forking
- PIDFile =/usr/local/nginx/logs/nginx.pid
- ExecStart=/usr/local/nginx/sbin/nginx
- ExecReload=/bin/kill -s HUP $MAINPID
- ExecStop=/bin/kill -s QUIT $MAINPID
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target
- ---------------------------------------------------------
- #每行意义
- [Unit]
- Description=nginx #描述
- After=network.target #描述服务类别
- [Service]
- Type=forking #后台运行形势
- PIDFile =/usr/local/nginx/logs/nginx.pid #PID文件位置
- ExecStart=/usr/local/nginx/sbin/nginx #启动服务
- ExecrReload=/bin/kill -s HUP $MAINPID #根据PID重载配置
- ExecrStop=/bin/kill -s QUIT $MAINPID #根据PID终止进程
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target

- chmod 754 /lib/systemd/system/nginx.service #设置754权限是一种安全优化
- systemctl start nginx.service
- systemctl enable nginx.service
vim /usr/local/nginx/conf/nginx.conf
- #user nobody; #运行用户,若编译时未指定则默认为 nobody
- worker_processes 1; #工作进程数量,可配置成服务器内核数 * 2
- #error_log logs/error.log; #错误日志文件的位置
- #pid logs/nginx.pid; #PID 文件的位置
- events {
- use epoll; #使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
- worker_connections 4096; #每个进程处理 4096 个连接
- }
- #如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
- #在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
- #可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制.
- 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;
- ##此选项允许或禁止使用socke的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
- #tcp_nopush on;
-
- ##连接保持超时时间,单位是秒
- #keepalive_timeout 0;
- keepalive_timeout 65;
-
- ##gzip模块设置,设置是否开启gzip压缩输出
- #gzip on;
-
- ##Web 服务的监听配置
- server {
- ##监听地址及端口
- listen 80;
- ##站点域名,可以有多个,用空格隔开
- server_name www.mhh.com;
-
- ##网页的默认字符集
- charset utf-8;
-
- ##根目录配置
- location / {
-
- ##网站根目录的位置/usr/local/nginx/html
- root html;
-
- ##默认首页文件名
- index index.html index.htm;
- }
-
- ##内部错误的反馈页面
- error_page 500 502 503 504 /50x.html;
- ##错误页面配置
- location = /50x.html {
- root html;
- }
- }
- }

- #重启服务,使修改的配置生效
- [root@bogon nginx-1.24.0]# systemctl restart nginx.servic
-
- [root@bogon nginx-1.24.0]# cat /etc/hosts #查看IP与域名映射关系
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
-
- #添加主机IP与域名映射关系
- [root@bogon nginx-1.24.0]# echo "192.168.231.102 www.mhh.com" >> /etc/hosts
- [root@bogon nginx-1.24.0]# cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.231.102 www.mhh.com #添加成功
- $remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
- $remote_user:用来记录客户端用户名称;
- $time_local: 用来记录访问时间与时区;
- $request: 用来记录请求的url与http协议;
- $status: 用来记录请求状态;成功是200,
- $body_bytes_sent :记录发送给客户端文件主体内容大小;
- $http_referer:用来记录从那个页面链接访问过来的;
- $http_user_agent:记录客户浏览器的相关信息;
-
- 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
- location常见配置指令,root、alias、proxy_pass
-
- root(根路径配置):请求www.mhh.com/test,会返回文件/usr/local/nginx/html/test/index.html
-
- alias(别名配置):请求www.mhh.com/test,会返回文件/usr/local/nginx/html/index.html
虚拟机浏览器访问http://192.168.231.102/test
nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况, 配置编译参数时可添加–with-http_stub_status_module 来启用此模块支持
/usr/local/nginx/sbin/nginx -V #查看版本号
- cd /usr/local/nginx/conf
- cp nginx.conf nginx.conf.bak
- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 80;
- server_name www.mhh.com;
- charset utf-8;
- location / {
- root html;
- index index.html index.php;
- }
- ##添加 stub_status 配置##
- location /status { #访问位置为/status
- stub_status on; #打开状态统计功能
- access_log off; #关闭此位置的日志记录
- }
- }
- }

浏览器访问 http://192.168.231.102/status
Active connections :表示当前的活动连接数;
server accepts handled requests :表示已经处理的连接信息,
三个数字依次表示服务器已接收的连接数;服务器成功处理的连接数;服务器累计处理的总请求数(在保持连接模式下,请求数量可能会大于连接数量)
Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在向客户端写入数据的连接数。
Waiting:表示当前空闲并等待请求的连接数。
刷新一次已处理的请求数加1。
要求:每10秒获取并发量大于2时,发送预警
- [root@bogon ~]# vim a.sh
-
- #!/bin/bash
-
- while true
- do
- #筛选静态状态的第三部分
- a=$(curl -Ls 192.168.231.102/status | awk '/Active connections/{print $3}')
-
- if [ $a -gt 2 ];then
- echo "警报!当前并发连续过高!当前并发数为:$a"
- fi
-
- sleep 10 #睡眠10秒
- done
- ~

用另一台虚拟机登录访问,后运行脚本
- yum install -y httpd-tools
- htpasswd -c /usr/local/nginx/passwd.db zhangsan
- chown nginx /usr/local/nginx/passwd.db
- chmod 400 /usr/local/nginx/passwd.db
- vim /usr/local/nginx/conf/nginx.conf
- ......
- server {
- location / {
- ......
- ##添加认证配置##
- auth_basic "secret"; #设置密码提示框文字信息
- auth_basic_user_file /usr/local/nginx/passwd.db;
- }
- }
- nginx -t
- systemctl restart nginx
-
- 浏览器访问 http://192.168.231.102
- 访问控制规则如下:
- deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
- allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
- 规则从上往下执行,如匹配则停止,不再往下匹配。
-
- vim /usr/local/nginx/conf/nginx.conf
- ......
- server {
- location / {
- ......
- ##添加控制规则##
- allow 192.168.80.200; #允许访问的客户端 IP
- deny all; #拒绝其它IP客户端访问
- }
- }
-
- systemctl restart nginx

echo "192.168.2.8 www.mhh.com www.accp.com" >> /etc/hosts
- mkdir -p /var/www/html/mhh
- mkdir -p /var/www/html/accp
- echo "<h1>www.mhh.com</h1>" > /var/www/html/mhh/index.html
- echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html
-
- vim /usr/local/nginx/conf/nginx.conf
- :35, 79 co 80
-
- ......
- http {
- ......
- server {
- listen 80;
- server_name www.abc.com; #设置域名www.kgc.com
- charset utf-8;
- access_log logs/www.abc.access.log; #设置日志名
- location / {
- root /var/www/html/abc; #设置www.kgc.com 的工作目录
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
-
- server {
- listen 80;
- server_name www.benet.com; #设置域名www.benet.com
- charset utf-8;
- access_log logs/www.benet.access.log;
- location / {
- root /var/www/html/benet;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }

- systemctl restart nginx
-
- 浏览器访问
- http://www.abc.com
- http://www.benet.com
- ifconfig ens33:0 192.168.2.88 netmask 255.255.255.0
-
- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 192.168.2.8:80; #设置监听地址
- server_name www.mhh.com;
- charset utf-8;
- access_log logs/www.mhh.access.log;
- location / {
- root /var/www/html/mhh;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
-
- server {
- listen 192.168.2.88:80; #设置监听地址
- server_name www.accp.com;
- charset utf-8;
- access_log logs/www.accp.access.log;
- location / {
- root /var/www/html/accp;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }
-
-
- systemctl restart nginx

- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 192.168.2.8:8080; #设置监听地址
- server_name www.mhh.com;
- charset utf-8;
- access_log logs/www.mhh.access.log;
- location / {
- root /var/www/html/mhh;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
-
- server {
- listen 192.168.2.8:8888; #设置监听地址
- server_name www.accp.com;
- charset utf-8;
- access_log logs/www.accp.access.log;
- location / {
- root /var/www/html/accp;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }
-
-
- systemctl restart nginx

轻量级,nginx比apache 占用更少的内存及资源;
静态处理,Nginx 静态处理性能比 Apache 高 ;
Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程;
Nginx高度模块化,编写模块相对简单,且组件比Apache少
高并发下nginx 能保持低资源低消耗高性能;
Nginx 配置简洁, Apache配置复杂;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。