Nginx虚拟主机的搭建的实现步骤

目录
  • Nginx服务基础
    • 关于Nginx
    • Nginx相对于Apache的优点:
    • Apache相对于Nginx的优点:
  • Nginx访问控制
    • 创建运行用户、组
    • 编译安装Nginx
  • 配置 Nginx服务管理
  • 认识Nginx服务的主配值文件nginx.conf
  • 访问状态统计配置
  • 基于授权的访问控制
    • 生成用户登录码认证文件
  • 基于客户端的访问控制
    • 访问控制规则如下
  • 基于域名的Nginx虚拟主机
    • 提供域名解析
    • 为虚拟主机添加测试文件
    • 修改Nginx配置文件
  • 基于IP的Nginx虚拟主机
  • 基于端口的 Nginx 虚拟主机

Nginx服务基础

关于Nginx

一款高性能、轻量级Web服务软件

稳定性高

系统资源消耗低

对HTTP并发连接的处理能力高

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

Nginx相对于Apache的优点:

轻星级,同样是web服务,比Apache 占用更少的内存及资源﹔高并发,Nginx处理请求是异步非塞的,而Apache
则是阻塞型的,在高并发下Nginx能保持低资源低消耗高性能;高度模块化的设计

编写模块相对简单;社区活跃,各种高性能模块出品迅速。

Apache相对于Nginx的优点:

rewrite,比Nginx的rewrite强大;模块超多,基本想到的都可以找到;少bug,Nginx的bug相对较多;超稳定

存在就是理由,一般来说,需要性能的web 服务,用Nginx。如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项,一般动态请求要Apache去做,Nginx只适处理静态网页或反向代理。

  • Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器;
  • Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;
  • Nginx避免子进程的概念,Apache是基于子进程的;
  • Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
  • Nginx支持热部署,Apache不支持热部署;
  • Nginx对于静态文件处理具有更高效率,Apache相对一般;
  • Nginx在反向代理场景具有明显优势,Apache相对一般。

Nginx访问控制

安装

关闭防火墙

安装依赖包

#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件yum -y install pcre-devel zlib-devel gcc gcc-c++ make#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
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.12.0.tar.gz -C /opt/

cd nginx-1.12.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的操作命令

启动前先关掉之前装的apache服务

检查、启动、重启、停止 nginx服务

nginx -t   #检查配置文件是否配置正确
nginx      #启动

#停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3 <PID号> #-3保证数据不丢失
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号>  #平滑升级
nginx -v           #查看版本号

新版本升级:
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module

nginx #启动服务
检查端口是否开启

查看进程号

使用kill命令杀死进程号即可停止nginx服务

配置 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
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

认识Nginx服务的主配值文件nginx.conf

1.全局块
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2.events块:
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3.http块:
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4.server块:
配置虚拟主机的相关参数,一个http中可以有多个server。

5.location块:
配置请求的路由,以及各种页面的处理情况。

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

1.全局设置

cat /proc/ cpuinfo l grep -c processor#查看cpu内核数

#user nobody;              #运行用户,若编译时未指定则默认为nobody
worker_processes 1;        #工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid;       #PID文件的位置

2.I/o事件配置

events {
    use epoll;                #使用epoll模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 4096;  #每个进程处理4096个连接
}
#如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

uname -r #查看内核版本

3.HTTP配置

http {
  ##文件扩展名与文件类型映射表
  include    mime.types;
  ##默认文件类型
  default_typeapplication/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;
  ##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
  #tcp_nopush  on;
  ##连接保持超时时间,单位是秒
  #keepalive_timeout 0;
  keepalive_timeout 65;
  ##gzip模块设置,设置是否开启gzip压缩输出
  #gzip on;

  ##web 服务的监听配置
  server {
    ##监听地址及端口
    listen 80;
    ##站点域名,可以有多个,用空格隔开
    server_name www.jzm.com;
    ##网页的默认字符集
    charset utf-8;
    ##根目录配置
    location / {
        ##网站根目录的位置/usr/local/nginx/html
        root html;
        ##默认首页文件名
        index index.html index.php;
    }
    ##内部错误的反馈页面
    error_page 500 502 503 504/50x.html;
    ##错误页面配置
    location = /50x.html {
        root html;
    }
  }
}

日志格式设定

$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(根路径配置):root /var/www/html
请求www.jzm.com/test/1.html,会返回文件/var/www/html/test/1.html

访问状态统计配置

1.先使用命令查看已安装的Nginx是否包含HTTP_STUB_STATUS模块

/usr/local/nginx/sbin/nginx -V
cat /opt/nginx-1.12.0/auto/options | grep YES #可查看nginx已安装的所有模块

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

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.jzm.com;
    charset utf-8;
    location / {
      root html;
      index index.html index.php;
    }
    #添加stub_status配置
    location /status {         #访问位置为/status
        stub_status on;        #打开状态统计功能
        access_log off;        #关闭此位置的日志记录
    }
  }
}

重启服务,访问测试

systemctl restart nginx

浏览器访问http://192.168.80.30/status
Active connections:表示当前的活动连接数;
server accepts handled requests:表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、己处理的请求数。可curl -Ls http://192.168.80.20/status 结合awk与if语句进行性能监控。

并发量检测脚本

#!/bin/bash
#设置变量,获取当前活跃的连接数
num=$(curl -Ls http://192.168.80.30/status | awk '/Active connections/ {print $3}')

if [ "$num" -gt 2 ];then
  echo "警告!当前web服务并发量过大!当前并发量为 $num"
fi

基于授权的访问控制

生成用户登录码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/userlist zhangsan #第一次一定要加-c
cat /usr/local/nginx/userlist
chown nginx /usr/local/nginx/userlist
chmod 400 /usr/local/nginx/userlist

修改主配置文件相对应目录,添加认证配置项

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.80.20

基于客户端的访问控制

访问控制规则如下

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

基于域名的Nginx虚拟主机

提供域名解析

echo "192.168.80.20 www.pll.com www.benet.com" >> /etc/hosts

为虚拟主机添加测试文件

mkdir -p /var/www/html/benet
mkdir -p /var/www/html/kgc
echo "www.pll.com" > /var/www/html/jzm/index.html
echo "www.benet.com" > /var/www /html/benet/index.html

修改Nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 80;
        server_name  www.jzm.com;
        charset utf-8;
        access_log logs/www.jzm.access.log;

        location / {
            root   /var/www/html/jzm;
            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;
         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;
               }
           }
      }

#检查语法
nginx -t
systemctl restart nginx
#浏览器访问
http://www.jzm.com/
http://www.benet.com/

基于IP的Nginx虚拟主机

ifconfig ens33:0 192.168.80.120 netmask 255.255.255.0

echo "192.168.80.20 www.jzm.com" >> /etc/hosts
echo "192.168.80.120 www.benet.com" >> /etc/hosts
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
  server {
    listen 192.168.80.20:80;
    server_name  www.jzm.com;
    charset utf-8;
    access_log logs/www.jzm.access.log;
    location / {
      root   /var/www/html/jzm;
      index  index.html index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }
  }
  server {
    listen 192.168.80.120:80;
    server_name 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://192.168.80.20/
http://192.168.80.120/

基于端口的 Nginx 虚拟主机

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
  server {
    listen 192.168.80.20:80;
    server_name  www.jzm.com;
    charset utf-8;
    access_log logs/www.jzm.access.log;
    location / {
      root   /var/www/html/jzm;
      index  index.html index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }
  }
  server {
    listen 192.168.80.120:8080;
    server_name 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://192.168.80.20:8080
http://192.168.80.120:8888

到此这篇关于Nginx虚拟主机的搭建的实现步骤的文章就介绍到这了,更多相关Nginx虚拟主机的搭建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于域名、端口和IP搭建nginx虚拟主机

    nginx支持的虚拟主机有三种 1.基于域名的虚拟主机 2.基于IP的虚拟主机 3.基于端口的虚拟主机 一.基于域名构建 1.编译安装nginx服务 2.配置DNS域名解析服务 3.配置虚拟主机 a.创建自测网页 [root@localhost named]# cd [root@localhost ~]# mkdir -p /var/www/html/kgc [root@localhost ~]# mkdir -p /var/www/html/accp [root@localhost ~]# l

  • Nginx虚拟主机的搭建的实现步骤

    目录 Nginx服务基础 关于Nginx Nginx相对于Apache的优点: Apache相对于Nginx的优点: Nginx访问控制 创建运行用户.组 编译安装Nginx 配置 Nginx服务管理 认识Nginx服务的主配值文件nginx.conf 访问状态统计配置 基于授权的访问控制 生成用户登录码认证文件 基于客户端的访问控制 访问控制规则如下 基于域名的Nginx虚拟主机 提供域名解析 为虚拟主机添加测试文件 修改Nginx配置文件 基于IP的Nginx虚拟主机 基于端口的 Nginx

  • Nginx虚拟主机的配置步骤过程全解

    目录 一.Nginx虚拟主机的配置 二.日志的配置 三.Nginx缓存配置 四.Nginx的gzip压缩配置 五.Nginx自动列目录配置 一.Nginx虚拟主机的配置 虚拟主机:通常情况下,为了使每个服务器可以供更多用户使用,可以将一个服务器分为很多虚拟的子服务器,每个子服务器都是互相独立的.这些服务器是根据虚拟化技术分出来的,这样,一台服务器就可以虚拟成很多台子服务器.我们把子服务器叫做虚拟主机.我们搭建好Nginx服务器之后,此时只有一台Nginx服务器,这时如果我们对这台服务器进行虚拟主

  • php管理nginx虚拟主机shell脚本实例

    本文实例讲述了php管理nginx虚拟主机shell脚本,分享给大家供大家参考.具体分析如下: 使用php作为shell脚本是一件很方便的事情.理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考: 复制代码 代码如下: #!/usr/bin/php -q <?php   start: fwrite(STDOUT,"===========Vhost Script===========\n"); fwrite(STDOUT,"=

  • nginx虚拟主机配置实例详解

    nginx虚拟主机配置 server { listen 80; server_name localhost; location / { root html; 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.

  • Nginx虚拟主机多server_name的顺序问题

    Nginx配置文件中没有相关的rewrite跳转规则,那么就应该是MediaWiki的PHP程序做的跳转,但是,遍历了MediaWiki目录下的所有文件以及查询了MySQL数据库中的每个表,都没有发现记录有这个域名.后来,通过查看源代码发现MediaWiki是根据$_SERVER['SERVER_NAME']做的跳转,顺藤摸瓜,发现了下列问题: 在一个Nginx虚拟主机中,可以绑定多个server_name,例如: 而server_name的先后顺序的不同,对PHP程序中使用$_SERVER["

  • Nginx 虚拟主机配置的三种方式(基于域名)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于IP) https://www.jb51.net/article/149774.htm 详解Nginx 虚拟主机配置的三种方式(基于端口) https://www.jb51.net/article/14978.htm 3.Nginx基于域名的虚拟主机配置 使用基于域名的虚拟主机配置是比较流行的方式,可以在同一个IP上配置多个域名并且都通过80端

  • 详解Nginx 虚拟主机配置的三种方式(基于IP)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于端口) https://www.jb51.net/article/14977.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 1.基于IP的虚拟主机配置 如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上. 1.1

  • 详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于IP) https://www.jb51.net/article/14974.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配

  • 深入浅析Nginx虚拟主机

    一 虚拟主机 1.1 虚拟主机概念 对于Nginx而言,每一个虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的. 1.2 虚拟主机类型 通过 Nginx 可以实现虚拟主机的配置,Nginx 支持三种类型的虚拟主机配置: 基于 IP 的虚拟主机(较少使用) 基于域名的虚拟主机 基于端口的虚拟主机 二 基于IP虚拟主机 2.1 配置多IP地址 [root@nginx ~]# ifconfig eth0:0 172.2

随机推荐