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


Posted in Servers onJanuary 18, 2022

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虚拟主机的搭建的实现步骤

创建运行用户、组

创建运行用户、组(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的操作命令

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

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

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

检查、启动、重启、停止 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虚拟主机的搭建的实现步骤

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

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

查看进程号

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服务的主配值文件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

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

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

vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
         ......
           #添加认证配置
           auth_basic "secret";
           #设置登录码提示框文字信息
           auth_basic_user_file /usr/local/nginx/passwd.db;
        }
    }

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

重启服务,访问测试
登录后复制

nginx -t
systemctl restart nginx

浏览器访问http://192.168.80.20

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

基于客户端的访问控制

访问控制规则如下

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虚拟主机的搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx开启Brotli压缩算法实现过程详解
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
Nginx已编译的nginx-添加新模块
Apr 01 Servers
windows下快速安装nginx并配置开机自启动的方法
May 11 Servers
nginx+lua单机上万并发的实现
May 31 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx反向代理学习实例教程
Oct 24 Servers
总结高并发下Nginx性能如何优化
Nov 01 Servers
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 Servers
KVM基础命令详解
Apr 30 Servers
V Rising 服务器搭建图文教程
Jun 16 Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 #Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 #Servers
Linux安装apache服务器的配置过程
Nov 27 #Servers
Nginx配置https的实现
nginx内存池源码解析
苹果M1芯片安装nginx 并且部署vue项目步骤详解
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 #Servers
You might like
德生H-501的评价与改造
2021/03/02 无线电
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
python输入中文的实例方法
2020/09/14 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
疾病捐款倡议书
2014/05/13 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers