Linux搭建Nginx高性能轻量级WEB服务器

news/2024/7/7 21:42:13 标签: nginx, linux

目录

Nginx概述

Linux的I/O

同步与异步

阻塞与非阻塞

常用状态码的含义

yum 安装 配置 nginx

 编译安装

访问状态统计配置:

基于授权密码的访问控制:

基于客户端的访问控制

nginx%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA-toc" style="margin-left:80px;">基于域名的nginx 虚拟主机

基于IP地址

基于端口


nginx%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA-toc" style="margin-left:80px;">

Nginx概述

Nginx

Nginx是一个高性能的HTTP和反向代理服务器。

是一款轻量级的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器

单台物理服务器可支持30000~50000个并发请求。

Apache

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

1、优缺点比较:

(1)nginx相对于apache的优点:

  • 轻量级,同样是web服务,比apache占用更少的内存及资源

  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的高并发下,nginx能保持低资源低消耗高性能

  • 高度模块化的设计,编写模块相对简单

(2)apache相对于nginx的优点:

  • Rewrite比nginx的rewrite强大 ###rewrite的主要功能就是实现统一资源定位符(URL)的跳转

  • 模块多,基本想到的都可以找到

  • 少bug,nginx的bug相对较多

  • 超稳定

存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。

2、作为web服务器:

相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。

  • Nginx作为负载均衡服务器:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持http代理服务器对外进行服务。

  • Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比较好。

  • 作为邮件代理服务器:最早开发这个产品的目的之一也是作为邮件代理服务器。

3、nginx配置简洁, apache较复杂

4、最核心的区别在于:

  • apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。

  • Nginx处理静态文件好,耗费内存少,只适合静态和反向。

  • Apache在处理动态有优势,

  • nginx并发性比较好,CPU占用内存低,如果rewrite频繁,选用apache最佳。

  • 总的来说,apache依然是大部分公司的首选。

Linux的I/O

I/O在计算机中指Input/Output,lOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的IO请求数量为单位,I/O请求通常为读或写数据操作请求。

一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

  • 磁盘I/O:buff/cache 的区别

  • 网络I/O:一切皆文件,本质为对socket文件的读写

 网络I/O

获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
返回数据,服务器将已构建好的响应再通过内核空间的网络I/0发还给客户端(5-7)

同步与异步

同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

  • 同步: synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

  • 异步: asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

阻塞与非阻塞

阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

  • 阻塞: blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。

  • 非阻塞: nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。

 

 阻塞型

 

非阻塞型同步  

 

 多路复用I/O模型 ( epoll poll select)

poll是Linu中的字符设备驱动中的一个函数。Linux 2.5.44版本后,poll被epoll取代。和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。

 信号驱动模型

 异步非阻塞I/O模型

常用状态码的含义

 

yum 安装 配置 nginx

关闭防火墙与selinux

systemctl stop firewal1d.service
setenforce 0

 

添加 nginx 到 yum 源中

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装 nginx (在吧nginx添加到 yum 源之后,就可以使用 yum 安装了)

sudo yum install -y nginx

启动 nginx

sudo systemctl start nginx.service

 编译安装

关闭防火墙与selinux

systemctl stop firewal1d.service
setenforce 0

 上传安装包 

nginx 链接:https://pan.baidu.com/doc/share/gK0eB3c_PgMKcgz9DAjQfA-857115113093369 提取码:eiqs

安装依赖关系包

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

新建用户 和组便于管理(nginx 服务程序默认 以 nobody 身份运行,建议为其创建专门的用户账户,以便更准确的控制访问权限)

useradd -M -s /sbin/nologin nginx

编译安装Nginx

cd /opt
tar zxvf nginx-1.120.tar.gz -C /opt
cd nginx-1.120  
./configure \
--prefix=/usr/local/nginx \
#安装路径
--user=nginx \
#指定用户名
--group=nginx \
#指定用户组
--with-http_stub_status_module
#启用此模块支持状态统计

make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx -t

#检查语法

ngnix
#启动


[root@localhost sbin]#cat/usr/local/nginx/logs/nginx.pid 
12388

 杀掉进程

kill -3 PID号
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade
#或者先killall nginx ,再 /usr/local/nginx/sbin/nginx

 添加 Nginx 系统服务

 vim /etc/init

#!/bin/bash
#chkconfig: 35 99 20
#description:Nginx Service Control Script
cmd="/usr/local/nginx/sbin/nginx"
pid="/usr/local/nginx/logs/nginx.pid"

case $1 in

start)
$cmd
;;

stop)
kill -3 `cat $pid`
;;

reload)
kill -1 `cat $pid`
;;

restart)
$0 stop
$0 start
;;

*)
echo "plaese input start,stop,reload,restart"
exit 1

esac
exit 0

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=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/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                     ###启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID             ###根据PID重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID                ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target


[root@localhost system]#systemctl daemon-reloadsystemctl daemon-reload 
#重载服务
[root@localhost system]#systemctl start nginx.service 
测试

 然后输入自己的ip地址就行了

访问状态统计配置:

修改nginx.conf 配置文件,指定访问位置并添加 stub_status配置。

[root@localhost conf]#vim nginx.conf
location /status {
            stub_status on;
            access_log off;
        }

基于授权密码的访问控制:

#安装工具包
[root@localhost conf]#yum install -y httpd-tools.x86_64 
[root@localhost conf]#htpasswd -c /usr/local/nginx/passwd.db zz
New password: 
Re-type new password: 
Adding password for user ww
[root@localhost conf]#htpasswd /usr/local/nginx/passwd.db ww
New password: 
Re-type new password: 
Adding password for user zz
[root@localhost conf]#cat /usr/local/nginx/passwd.db 
zz:$apr1$E9CBn4bA$99TtA9W.GwBUloxiqHbWK1
ww:$apr1$dMfNWk1D$2fUtRx6AgtSweZ6YF1VeC1

#修改配置文件
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
location / {
            root html;
            index index.html index.htm;
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }
#查看语法是否错误
[root@localhost conf]#nginx -t
#重启 Nginx服务
[root@localhost conf]#systemctl restart nginx.service 
#设置文件属主和权限
[root@localhost conf]#chown nginx /usr/local/nginx/passwd.db 
[root@localhost conf]#chmod 400 /usr/local/nginx/passwd.db 

基于客户端的访问控制

基于客户端的访问控制简介 基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于 客户端的访问控制要比 Apache 简单,规则如下:

1)deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。

2)allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。

3)规则从上往下执行,如匹配则停止,不再往下匹配。

[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
  location / {
            #auth_basic "secret";
            #auth_basic_user_file /usr/local/nginx/passwd.db;
            deny 192.168.91.100;                      ###客户端IP
            allow all;
            root   html;
            index  index.html index.htm;
        }

nginx%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA">基于域名的nginx 虚拟主机

利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一 组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功 能。跟 Apache 一样,Nginx 也可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、 基于域名的虚拟主机、基于端口的虚拟主机。 使用 Nginx 搭建虚拟主机服务器时,每个虚拟 Web 站点拥有独立的“server{}”配置段, 各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。

[root@localhost var]#mkdir -p www/html/{kgc,accp}
[root@localhost html]#echo "this is kgc web" > kgc/index.html
[root@localhost html]#echo "this is accp web" > accp/index.html
[root@localhost html]#cat kgc/index.html 
this is kgc web
[root@localhost html]#cat accp/index.html 
this is accp web

[root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.accp.com;

        charset utf-8;

        access_log  logs/accp.access.log;

        location / {
            root /var/www/html/accp;
            index index.html index.htm;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

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

        charset utf-8;

        access_log  logs/kgc.access.log;

        location / {
            root /var/www/html/kgc;
            index index.html index.htm;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

基于IP地址

[root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
server {
        listen   192.168.241.134:80;
        server_name  www.kgc.com;
        
        
server {
        listen   192.168.241.100:80;
        server_name  www.kgc.com;

基于端口

[root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
server {
        listen   192.168.241.134:80;
        server_name  www.kgc.com;
        
        
server {
        listen   192.168.241.134:60;
        server_name  www.kgc.com;


http://www.niftyadmin.cn/n/1756264.html

相关文章

Linux搭建LNMP平台与DISCUZ论坛

目录 LNMP简介 LNMP特点 LNMP优点 编译安装NGINX 编译安装mysql5.7 安装配置php文件 配置及优化FPM模块 部署 Discuz!社区论坛 Web 应用 LNMP简介 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 L指Linux,N指Ng…

Tomcat(Web应用服务器)

介绍: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 对于一个初学者来说,可以这样认为&#xf…

Linux中buff和cache的解释与区别

目录 什么是 buffer/cache? 什么是 page cache? 什么是 buffer cache? buff和cache的区别 因为本人对buff/cache认识很模糊,所以记录一下从其他博客学习到的东西。 什么是 buffer/cache? buffer 和 cache 是两个…

linux命令就应该这样记(带索引超详细)

Linux命令大全 1、帮助命令: help命令只能显示shell内部命令的帮助信息,而linux系统中绝大多数命令是外部命令,所以help命令的作用非常有限。 而对于外部命令的帮助信息可以使man命令或者info命令查看。 (1) help:显示shell内…

Linux永久/临时修改主机名

注意 主机名可以是任意格式的字符串,最长为 64 个字符。但建议在 static 和 transient 名称与 DNS采用的完全限定域名(FQDN)匹配,比如 host.example.com。还建议在 static 和 transient 名称中只包含 7字节 ASCII 小写字符&#x…

Linux核心系统管理命令

目录 lsof:查看进程打开的文件 free:查看系统内存信息 iftop:动态显示网络接口流量信息 vmstat:虚拟内存统计 mpstat:CPU信息统计 iostat:I/O信息统计 iotop:动态显示磁盘I/O统计信息 sar:收集系统…

LVS集群---NAT模式与DR模式部署

目录 LVS集群(Linux Virtual server) 集群和分布式 集群 Cluster LVS负载均衡调度算法 分布式系统 集群和分布式 集群设计原则 集群设计实现 LB Cluster 负载均衡集群 HA 高可用集群实现 Linux Virtual Server简介 LVS介绍 LVS工作原理 LV…

面试题——脑裂的产生与解决方法

目录 什么是脑裂? 脑裂产生的原因  常见的解决方案 编写监控脑裂脚本 测试 确保两台负载均衡能够正常负载 什么是脑裂? 通俗来讲就是一个黑帮中出现了两个老大,所谓一山不容二虎,就造成了领导混乱。 在高可用&#xff08…