Nginx虚拟主机

在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理

配置nginx虚拟主机有三种方法:基于ip地址的虚拟主机、基于域名的虚拟主机以及基于端口的虚拟主机

准备工作
  1. # list
  2. # CentOS Linux release 7.3.1611 (Core)
  3. # nginx-1.14.2.tar.gz
  4. # nginx-1.16.0.tar.gz
  5. # install_nginx.sh
初始化环境
  1. init_security() {
  2. systemctl stop firewalld
  3. systemctl disable firewalld &>/dev/null
  4. setenforce 0
  5. sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
  6. sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
  7. sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
  8. systemctl enable sshd crond &> /dev/null
  9. echo -e "\033[32m [安全配置] ==> OK \033[0m"
  10. }
  11. init_yumsource() {
  12. if [ ! -d /etc/yum.repos.d/backup ];then
  13. mkdir /etc/yum.repos.d/backup
  14. fi
  15. mv /etc/yum.repos.d/* /etc/yum.repos.d/backup 2>/dev/null
  16. if ! ping -c 2 baidu.com &>/dev/null
  17. then
  18. echo "您无法上外网,不能配置yum源"
  19. exit
  20. fi
  21. curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
  22. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
  23. echo -e "\033[32m [YUM Source] ==> OK \033[0m"
  24. }
  25. init_data() {
  26. # 准备数据目录,方便待会区分虚拟主机
  27. mkdir /a_test
  28. mkdir /b_test
  29. echo a_test >> /a_test/index.html
  30. echo b_test >> /a_test/index.html
  31. mkdir /usr/local/nginx/logs/{a,b}_test
  32. mkdir /usr/local/nginx/conf.d
  33. }
  34. main() {
  35. init_security
  36. init_yumsource
  37. init_data
  38. }
使用脚本安装nginx
  1. #!/usr/bin/env bash
  2. # Author: ZhouJian
  3. # Mail: 18621048481@163.com
  4. # Time: 2019-9-3
  5. # Describe: CentOS 7 Install Nginx Source Code Script
  6. version="nginx-1.14.2.tar.gz"
  7. user="nginx"
  8. nginx=${version%.tar*}
  9. path=/usr/local/src/$nginx
  10. echo $path
  11. if ! ping -c2 www.baidu.com &>/dev/null
  12. then
  13. echo "网络不通,无法安装"
  14. exit
  15. fi
  16. yum install -y gcc gcc-c++ openssl-devel pcre-devel make zlib-devel wget psmisc
  17. #if [ ! -e $version ];then
  18. # wget http://nginx.org/download/$version
  19. #fi
  20. if ! id $user &>/dev/null
  21. then
  22. useradd $user -M -s /sbin/nologin
  23. fi
  24. if [ ! -d /var/tmp/nginx ];then
  25. mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
  26. fi
  27. tar xf $version -C /usr/local/src
  28. cd $path
  29. ./configure \
  30. --prefix=/usr/local/nginx \
  31. --user=nginx \
  32. --group=nginx \
  33. --with-http_ssl_module \
  34. --with-http_flv_module \
  35. --with-http_stub_status_module \
  36. --with-http_sub_module \
  37. --with-http_gzip_static_module \
  38. --with-http_auth_request_module \
  39. --with-http_random_index_module \
  40. --with-http_realip_module \
  41. --http-client-body-temp-path=/var/tmp/nginx/client \
  42. --http-proxy-temp-path=/var/tmp/nginx/proxy \
  43. --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
  44. --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  45. --http-scgi-temp-path=/var/tmp/nginx/scgi \
  46. --with-pcre \
  47. --with-file-aio \
  48. --with-http_secure_link_module && make && make install
  49. if [ $? -ne 0 ];then
  50. echo "nginx未安装成功"
  51. exit
  52. fi
  53. killall nginx
  54. /usr/local/nginx/sbin/nginx
  55. #echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
  56. #chmod +x /etc/rc.local
  57. #systemctl start rc-local
  58. #systemctl enable rc-local
  59. ss -antp |grep nginx
  60. # 至此服务就起来了,接下来我们分别做两种虚拟主机
基于域名的虚拟主机

基于域名的虚拟主机原理:相同IP地址,相同端口、不同的域名。也就是说多个虚拟主机之间共用一个ip地址以及一个端口(80),区分各个主机之间使用不同的域名,当然访问的时候也就只能使用域名进行访问了,基于域名的虚拟主机是最常用的方式

  1. # 注意修改此处,否则启动nginx只会生效默认位置nginx配置文件
  2. # include /usr/local/nginx/conf.d/*.conf;
  3. [root@test1 nginx]# cat conf.d/a.conf
  4. server{
  5. listen 80;
  6. server_name www.a.com a.com;
  7. access_log /usr/local/nginx/logs/a_test/access.log;
  8. location / {
  9. root /a_test;
  10. index index.html;
  11. }
  12. }
  13. [root@test1 nginx]# cat conf.d/b.conf
  14. server{
  15. listen 80;
  16. server_name www.b.com b.com;
  17. access_log /usr/local/nginx/logs/b_test/access.log;
  18. location / {
  19. root /b_test;
  20. index index.html;
  21. }
  22. }
  1. /usr/local/nginx/sbin/nginx -s reload # 平滑加载配置
  2. [root@test1 nginx]# ss -tnl
  3. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  4. LISTEN 0 128 *:80 *:*
  5. LISTEN 0 128 *:81 *:*
  6. LISTEN 0 128 *:82 *:*
基于端口的虚拟主机
  1. [root@test1 nginx]# cat conf.d/a.conf
  2. server{
  3. listen 81;
  4. server_name www.a.com a.com;
  5. access_log /usr/local/nginx/logs/a_test/access.log;
  6. location / {
  7. root /a_test;
  8. index index.html;
  9. }
  10. }
  11. server{
  12. listen 82;
  13. server_name www.a.com a.com;
  14. access_log /usr/local/nginx/logs/a_test/access.log;
  15. location / {
  16. root /a_test;
  17. index index.html;
  18. }
  19. }

Nginx平滑升级

  1. # 在上面源码编译安装Nginx1.14的基础上升级到1.16
  2. wget http://nginx.org/download/nginx-1.16.0.tar.gz
  3. tar xf nginx-1.16.0.tar.gz -C /usr/local/src/
  4. cd /usr/local/src/nginx-1.16.0/
  5. ./configure --prefix=/usr/local/nginx116 --with-http_stub_status_module --with-http_ssl_module --user=nginx --group=nginx
  6. make && make install
  7. # 备份原来老的Nginx文件,主要是为了回退
  8. cp ./nginx/sbin/nginx ./nginx/sbin/nginx.bak
  9. # 将新版的Nginx二进制文件替换已安装的Nginx的二进制文件
  10. cp nginx116/sbin/nginx nginx/sbin/nginx -rf
  11. ./nginx/sbin/nginx -v
  12. # nginx version: nginx/1.16.0
  13. # 给Nginx旧的主进程发送一个USR2信号,让新主进程和旧进程同时工作.
  14. # 再发一个Winch给旧的主进程号让子进程退出,如果主进程还在,方便回滚
  15. kill -USR2 17522
版本回滚
  1. cp nginx.bak ./nginx/sbin/nginx -rf
  2. # 发送HUP信号唤醒旧版本
  3. kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin `
  4. # 关闭新版本的主进程和Worker进程
  5. kill -USR2 24148
  6. kill -WINCH 24148
  7. [root@test1 local]# ./nginx/sbin/nginx -v
  8. # nginx version: nginx/1.14.2

02 . Nginx平滑升级和虚拟主机的更多相关文章

  1. nginx之全局设置,location,虚拟主机,日志管理

    nginx之全局设置,location,虚拟主机,日志管理 worker_processes 1;//子进程,cpu数*核数 ****************全局设置************** ** ...

  2. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

    为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...

  3. [原]生产环境下的nginx.conf配置文件(多虚拟主机)

    [原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...

  4. Nginx安装及配置虚拟主机

    nginx安装部分 依赖环境 yum -y install gcc zlib openssl-devel zlib-devel 1. 下载好下面两个包:nginx-1.8.1.tar.gz pcre- ...

  5. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) 【转】

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  6. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级)

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  7. nginx平滑升级实战

    Nginx 平滑升级 1.查看旧版Nginx的编译参数 [root@master ~]# /usr/local/nginx/sbin/nginx -V [root@master ~]# ll ngin ...

  8. Nginx平滑升级版本!(重点)

    一.解释nginx的平滑升级 随着nginx越来越流行使用,并且nginx的优势也越来越明显,nginx的版本迭代也开始了加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理 ...

  9. Nginx平滑升级详细步骤-113p.cn

    认识平滑升级 有时候我们需要对Nginx版本进行升级以满足运维人员对其功能的需求,例如添加xxx模块,需要xxx功能,而此时Nginx又在跑着业务无法停掉,这时我们就只能平滑升级了. 平滑升级原理 N ...

随机推荐

  1. E. Yet Another Task with Queens(分类思想)

    \(\color{Red}{描述}\) \(在n*n的棋盘上有m个K皇后,每个皇后可能被来自8个方向的其他皇后攻击\) \(每个皇后只可能被(0-8)只皇后攻击,分别求出被(0-8)只皇后攻击的皇后数 ...

  2. springboot关于webmvc配置问题记录

    在之前的文章(springboot配置静态资源访问路径)中说过,springboot默认的加载静态资源的地方是在resources目录下的static文件夹下,其实除了resources目录下得sta ...

  3. mybatis传递参数的方法

    一.传递一个参数 例:根据员工编号查询员工的基本信息 1.在dao接口中声明一个方法 2.在mapper中实现该方法 3.测试 /** * 传递一个参数 */ public class Test02 ...

  4. webpack-基础知识

    一.webpack介绍 webpack是一个前端模块化工具,简单解释:webpack就是处理多个文件,根据设置的规则,对文件进行合并和修改. 正式说:webpack是一个模块化打包工具.从入口模块出发 ...

  5. 物流配送中心管理系统(SSM+MYSQL)

    工程项目视频观看地址:www.toutiao.com/i6804066711… 本文首先对系统所涉及到的基础理论知识进行阐述,并在此基础上进行了系统分析.系统分析是平台开发的一个不可缺少的环节,为了能 ...

  6. 【Hadoop离线基础总结】Sqoop数据迁移

    目录 Sqoop介绍 概述 版本 Sqoop安装及使用 Sqoop安装 Sqoop数据导入 导入关系表到Hive已有表中 导入关系表到Hive(自动创建Hive表) 将关系表子集导入到HDFS中 sq ...

  7. Git使用教程之从远程库克隆项目(四)

    我们接下来在本地新建一个文件夹,把刚刚github上创建的项目克隆下来,操作步骤如下: 1.克隆项目: 找到github上面的SSH地址,如图: 开始克隆: $ git clone git@githu ...

  8. GraphQL-- 使用Apollo Server搭建Node服务端

    一.关于Apollo Server Apollo Server是一种使用JS创建GraphQL服务端的一个方案.它的兼容性比较好,可以很好地和GraphQL客户端进行兼容.同时它可以 独立作为服务端进 ...

  9. 「雕爷学编程」Arduino动手做(28)——RGB全彩LED模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  10. MySQL 选错索引的原因?

    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的.那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 ...