前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx网站服务详解(一)

Nginx网站服务详解(一)

作者头像
刘銮奕
发布2020-03-06 13:43:12
5620
发布2020-03-06 13:43:12
举报
文章被收录于专栏:奕知伴解奕知伴解

通过CentOS7系统环境下进行演示

Nginx部署环境准备

1、yum环境部署

使用阿里云镜像源

配置方法:

a、备份

代码语言:javascript
复制
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

b、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

代码语言:javascript
复制
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

参考地址:阿里云yum源部署

c、运行 yum makecache 生成缓存

2、使用清华镜像源

写入清华镜像站 Centos 的内容:

代码语言:javascript
复制

cat > /etc/yum.repos.d/centos.repo << EOF
[base]
name=CentOS-\$releasever - Base
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/os/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#released updates
[updates]
name=CentOS-\$releasever - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/updates/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-\$releasever - Extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/extras/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-\$releasever - Plus
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/centosplus/\$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
EOF

参考地址:清华yum源部署

其余步骤与上述阿里云部署一致

安装 epel 源

代码语言:javascript
复制
yum install epel-release -y

写入清华镜像站 epel 的内容:

代码语言:javascript
复制
cat > /etc/yum.repos.d/epel.repo << EOF
[epel]
name=Extra Packages for Enterprise Linux 7 - \$basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/\$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
 
EOF

2、准备好hosts文件和hostname

因为搭建的使用的是本地网络进行访问,所以这里要准备好hostname和hosts文件的标准化,有助于我们学习一系列课程的便捷和减少遇到一些不必要的麻烦。

hostname建议使用-进行分割命名含义,不要使用下划线_。这是使用DNS对下划线 _不能解析。

hosts文件是DNS解析文件。

我机器配置参考:

hostname文件

代码语言:javascript
复制
[root@liu-node1 ~]# cat /etc/hostname 
liu-node1

hosts文件

测试机有两块网卡

代码语言:javascript
复制
[root@liu-node1 ~]# cat /etc/hosts

192.168.0.44 liu-node2 liu-node2.liu.com
192.168.0.43 liu-node1 liu-node1.liu.com
192.168.0.43 www.liuluanyi.cn
10.0.0.43    www.liuluanyi.cn
192.168.0.43 bbs.liuluanyi.cn
192.168.0.43 blog.liuluanyi.cn

3、yum安装Nginx服务

代码语言:javascript
复制
yum install nginx -y

4、查看Nginx版本

代码语言:javascript
复制
[root@liu-node1 ~]# nginx -v
nginx version: nginx/1.16.1

5、关闭selinux 这个可以减少初学者许多不必要的麻烦,后面学习的深入建议开启

代码语言:javascript
复制
[root@liu-node1 ~]# cat /etc/selinux/config

效果如下:

代码语言:javascript
复制

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

6、查看Nginx配置文件

代码语言:javascript
复制
[root@liu-node1 ~]# cat /etc/nginx/nginx.conf

修改成如下配置:

代码语言:javascript
复制
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

#include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    #tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;  //媒体资源类型文件作用
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;  //加载多个虚拟主机文件

Nginx配置文件参数解释

1、log日志参数

代码语言:javascript
复制
访问日志: /var/log/nginx/access.log    ngx_http_log_module                                                   
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  /var/log/nginx/access.log  main;                                调用日志格式                   
                                                                                                             
$remote_addr   			显示用户访问源IP地址信息                                                                 
  $remote_user            显示认证的用户名信息                                                               
[$time_local]           显示访问网站时间                                                                     
"$request"              请求报文的请求行信息                                                                 
  $status                 用户访问网站状态码信息                                                             
$body_bytes_sent        显示响应的数据尺寸信息                                                               
$http_referer           记录调用网站资源的连接地址信息(防止用户盗链)                                         
$http_user_agent        记录用户使用什么客户端软件进行访问页面的            
$http_x_forwarded_for   ??? 负载均衡

2、nginx常用命令参数

代码语言:javascript
复制
	-t        : test configuration and exit
	                检查测试配置文件语法
	-s        : send signal to a master process: stop, quit, reopen, reload
	                控制服务停止或者重新启动

3、虚拟主机配置文件解释

代码语言:javascript
复制
server {
   listen        80;   //监听端口
   server_name   www.liuluanyi.cn;  别名;访问域名
   location  / {    //location指定网站资源
     root  /html/www;    //指定网站目录
     index index.html;   //首页文件
   }
}

Nginx多站点搭建

1、创建站点目录和目录中首页文件

代码语言:javascript
复制
[root@liu-node1 conf.d]#  mkdir /html/{www,bbs,blog} -p
[root@liu-node1 conf.d]# for name in {www,bbs,blog};do echo "192.168.0.43 $name.liuluanyi.cn" >/html/$name/index.html  ;done

查看配置结果:

代码语言:javascript
复制
[root@liu-node1 conf.d]# for name in {www,bbs,blog};do cat /html/$name/index.html  ;done
192.168.0.43 www.liuluanyi.cn
192.168.0.43 bbs.liuluanyi.cn
192.168.0.43 blog.liuluanyi.cn

2、创建多个虚拟主机配置文件

bbs.conf

代码语言:javascript
复制
server {                           
   listen        80;               
   server_name   bbs.liuluanyi.cn;
   location  / {                   
     root  /html/bbs;              
     index index.html;             
   }                               
}

blog.conf

代码语言:javascript
复制
server {
    listen       80;
    server_name  blog.liuluanyi.cn;
    location  / {
         root    /html/blog;
         index   index.html;
    }
}

www.conf

代码语言:javascript
复制

server {
   listen        80;
   server_name   www.liuluanyi.cn;
   location  / {
     root  /html/www;
     index index.html;
   }
}

==nginx配置文件修改一定要重启服务==

代码语言:javascript
复制
systemctl reload nginx  //平滑重启
systemctl restart nginx  //硬式重启

3、访问测试

代码语言:javascript
复制
[root@liu-node1 conf.d]# curl www.liuluanyi.cn
192.168.0.43 www.liuluanyi.cn
[root@liu-node1 conf.d]# curl blog.liuluanyi.cn
192.168.0.43 blog.liuluanyi.cn
[root@liu-node1 conf.d]# curl bbs.liuluanyi.cn
192.168.0.43 bbs.liuluanyi.cn

涉及多个站点,如果我直接通过192.168.0.43默认访问www.liuluanyi.cn的站点,可以进行下面操作:

编辑nginx配置文件/etc/nginx/nginx.conf

代码语言:javascript
复制
include /etc/nginx/conf.d/www.conf;  //添加的配置
include /etc/nginx/conf.d/*.conf;

Nginx重启后,进行验证:

代码语言:javascript
复制
[root@liu-node1 conf.d]# curl 192.168.0.43
192.168.0.43 www.liuluanyi.cn

4、虚拟主机访问方式

a、基于域名的方式进行访问:

b、基于地址的方式进行访问: (只能用指定地址访问)

负载均衡+高可用服务 场景使用较多

代码语言:javascript
复制
server {
         listen        192.168.0.43:80;
         server_name   www.liuluanyi.cn;
         location  / {
           root  /html/www;
           index index.html;
         }
      }

PS: 服务配置文件中涉及到地址修改,必须重启nginx服务,不能平滑重启

平滑重启的效果:

代码语言:javascript
复制
[root@liu-node1 conf.d]# netstat -ntlp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6458/nginx: master

硬式重启的效果:

代码语言:javascript
复制
[root@liu-node1 conf.d]# netstat -ntlp | grep 80
tcp        0      0 192.168.0.43:80         0.0.0.0:*               LISTEN      29532/nginx: master

c、基于端口的方式进行访问:

zabbix服务(apache:80) + web服务(nginx:80) --> 主机

多个服务部署到同一个主机上

代码语言:javascript
复制
server {
       listen        8080;
       server_name   www.liuluanyi.cn;
       location  / {
         root  /html/www;
         index index.html;
       }
    }

Nginx网站的安全访问配置

a、根据用户访问的地址进行控制

代码语言:javascript
复制
10.0.0.0/24   www.liuluanyi.cn/file/  不能访问
192.168.0.0/24 www.liuluanyi.cn/file/  可以访问

创建相应的访问文件

代码语言:javascript
复制
[root@liu-node1 conf.d]# mkdir -p /html/www/file
[root@liu-node1 conf.d]# 
[root@liu-node1 conf.d]# echo "liu-node1" > /html/www/file/index.html

编辑www.conf站点配置文件

代码语言:javascript
复制
server {
   listen        80;
   server_name   www.liuluanyi.cn;
   location  / {
     root  /html/www;
     index index.html;
   }
   location /file {
     root /html/www;
     index index.html;
}

放在location之外的代表全局变量,location之内的代表内部变量,进行测试访问。

确定是在192.168.0.0/24网段访问

代码语言:javascript
复制
[root@liu-node1 conf.d]# ping www.liuluanyi.cn 
PING www.liuluanyi.cn (192.168.0.43) 56(84) bytes of data.
64 bytes from liu-node1 (192.168.0.43): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from liu-node1 (192.168.0.43): icmp_seq=2 ttl=64 time=0.096 ms

curl访问测试

代码语言:javascript
复制
[root@liu-node1 conf.d]# curl www.liuluanyi.cn/file/index.html
liu-node1

确定是在10.0.0.0/24网段访问

代码语言:javascript
复制
[root@liu-node1 conf.d]# ping www.liuluanyi.c 
PING www.liuluanyi.cn (10.0.0.43) 56(84) bytes of data.
64 bytes from liu-node1 (10.0.0.43): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from liu-node1 (10.0.0.43): icmp_seq=2 ttl=64 time=0.096 ms

curl访问测试

代码语言:javascript
复制
[root@liu-node1 conf.d]# curl www.liuluanyi.cn/file/index.html
liu-node1

访问nginx官网查看nginx访问模块: ngx_http_access_module的使用方法。

官网举例配置:

代码语言:javascript
复制
location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

配置指令的使用方法

代码语言:javascript
复制
Syntax:	allow address | CIDR | unix: | all;
Default:	—
Context:	http, server, location, limit_except

最终修改成下所示:

代码语言:javascript
复制
server {
   listen        80;
   server_name   www.liuluanyi.cn;
   location  / {
     root  /html/www;
     index index.html;
   }
   location /file {
     deny 10.0.0.0/24;
     allow 192.168.0.0/24;
     root /html/www;
     index index.html;
}

b、根据用户访问进行认证

nginx认证模块: ngx_http_auth_basic_module

官网配置举例:

代码语言:javascript
复制
location / {
         auth_basic           "closed site";    --- 开启认证功能
         auth_basic_user_file conf/htpasswd;    --- 加载用户密码文件
      }

编写虚拟主机配置文件

代码语言:javascript
复制
server {
   listen        80;
   server_name   www.liuluanyi.cn;
   location  / {
     root  /html/www;
     index index.html;
     auth_basic           "liu-node1";
     auth_basic_user_file password/htpasswd;
   }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奕知伴解 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx部署环境准备
  • Nginx配置文件参数解释
  • Nginx多站点搭建
  • Nginx网站的安全访问配置
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档