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实现限制某IP短时间访问次数
Mar 31 Servers
Apache POI的基本使用详解
Nov 07 Servers
使用 Apache Dubbo 实现远程通信(微服务架构)
Feb 12 Servers
nginx共享内存的机制详解
Mar 21 Servers
阿里云k8s服务升级时502错误 springboot项目应用
Apr 09 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
openstack云计算keystone组件工作介绍
Apr 20 Servers
nginx 配置指令之location使用详解
May 25 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
Ubuntu安装Mysql+启用远程连接的完整过程
Jun 21 Servers
windows系统搭建WEB服务器详细教程
Aug 05 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
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python实现超级玛丽游戏
2020/03/18 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
搞笑婚礼主持词
2014/03/13 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
小学生倡议书范文
2014/05/13 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
先进班组材料范文
2014/12/25 职场文书
2015年林业工作总结
2015/05/14 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
如何使用pdb进行Python调试
2021/06/30 Python