目录
- 1、源码安装nginx,并提供服务脚本。
- 配置服务启动脚本
- 2、配置基于域名的虚拟主机
- 3. 配置nginx基于用户和地址的访问控制。
- 配置基于地址的访问控制:
- 基于基于用户的访问控制
- 4.配置nginx rewrite,要求如果访问不存在的任意网页都重定向到错误页面,错误页面内容自行定义。
1.源码安装nginx,并提供服务脚本。 2.配置基于域名的虚拟主机。 3. 配置nginx基于用户和地址的访问控制。 4. 配置nginx rewrite,要求如果访问不存在的任意网页都重定向到错误页面,错误页面内容自行定义。
1、源码安装nginx,并提供服务脚本。
内存在yum安装,如redhat7上没有Nginx 可以在本地yum安装Nginx
1、源码安装会有一些软件依赖
(1)检查并安装 Nginx 基础依赖包 pcre-devel 、openssl-devel
# rpm -qa | egrep 'pcre-devel | openssl-devel'
(2).安装 Nginx 所需的 pcre 库 正则支持
pcre 的全称为 perl compatible regular expressions,中文译为 “ perl 兼容正则表达式”,官方站点为 http://www.pcre.org/, 安装 pere 库是为了使 Nginx 支持具备 URI 重写功能的 rewrite 模块,如果不安装 pere 库,则 Nginx 无法使用 rewrite 模块功能,Nginx的 rewrite 模块功能几乎是企业应用必须的。
yum install -y pcre-devel
(3) 安装 openssl-devel 加密支持 Nginx 在使用 HTTPS 服务的时候要用到此模块,如果不安装 openssl 相关包,安装Nginx 的过程中会报错。
yum install -y openssl-devel
(4)安装编译软件
[root@node3 ~]# yum install gcc gcc-c++ make -y
2、 nginx获取
RPM包获取:http://nginx.org/packages/
源码包获取:http://nginx.org/download/
在这的安装我使用的Tengine(淘宝对Nginx二次开发后的) 获取地址:http://tengine.taobao.org/
(1)这里我选择的版本为tengine-2.3.0,通过wget安装
[root@node3 ~]# wget -c http://tengine.taobao.org/download/tengine-2.3.0.tar.gz
(2)解压tengine到指定文件夹
[root@node3 ~]# tar xf tengine-2.3.0.tar.gz -C /usr/local/src/
[root@node3 ~]# cd /usr/local/src/tengine-2.3.0/
(3)创建用户nginx 此处只设置便于不登录即可
[root@node3 tengine-2.3.0]# useradd -s /sbin/nginx nginx
(4) 开始安装 Nginx
[root@node3 tengine-2.3.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module
(5)编译安装
[root@node3 tengine-2.3.0]# make
[root@node3 tengine-2.3.0]# make install
(6)测试nginx启动
[root@node3 tengine-2.3.0]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
(7)启动nginx
[root@node3 tengine-2.3.0]# /usr/local/nginx/sbin/nginx
为nginx提供SysV init脚本
配置服务启动脚本
[root@node3 tengine-2.3.0]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载启动脚本并启动服务
[root@node3 tengine-2.3.0]# systemctl daemon-reload
[root@node3 tengine-2.3.0]# systemctl start nginx
[root@node3 tengine-2.3.0]# systemctl status nginx
测验通过本机测试
显示此网页访问成功
2、配置基于域名的虚拟主机
1)需要先准备环境,创建站点目录
[root@node3 nginx]# for i in blog bbs #使用for语句循环创建站点目录
> do
> mkdir html/$i
> done
[root@node3 nginx]# ls html #可以查看目录存在
50x.html bbs blog index.html
2)创建主页文件
[root@node3 nginx]# for i in blog bbs
> do
> echo "$i test page." > html/$i/index.html
> done
3)添加模块化配置文件include /usr/local/nginx/conf.d/*.conf;
[root@node3 nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
#gzip on;
include /usr/local/nginx/conf.d/*.conf; #添加该行到配置中;
4)创建该文件目录
[root@node3 nginx]# mkdir /usr/local/nginx/conf.d
5)配置文件添加虚拟主机部分,创建虚拟主机
[root@node3 ~]# vim /usr/local/nginx/conf.d/vhost.conf
server {
listen 80;
server_name bbs.test.com;
location / {
root html/bbs;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.test.com;
location / {
root html/blog;
index index.html index.htm;
}
}
6)在另一台设备上配置hosts域名信息
[root@node2 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.142.155 bbs.test.com blog.test.com
可以通过域名测试访问
3. 配置nginx基于用户和地址的访问控制。
配置基于地址的访问控制:
(1)安装模块
默认已经内置,无需安装。
(2)指令
allow
语法: allow address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
deny
语法: deny address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
1)在虚拟主机中配置基于地址的访问控制 该访问控制的匹配规则 是按顺序逐条匹配
[root@node3 nginx]# vim conf.d/vhost.conf
server {
listen 80;
server_name bbs.test.com;
location / {
root html/bbs;
index index.html index.htm;
deny 192.168.142.168; #配置需要拒绝访问的地址
allow 192.168.142.0/24; #配置允许地址段
deny all; #拒绝所有其他地址
}
location /nginx_status {
stub_status on;
access_log off;
}
}
2)在配置拒绝访问的192.168.142.168的主机上访问测试
2)在允许访问的其他地址段进行测试该网页
基于基于用户的访问控制
对于实现访问网站或目录密码认证保护,nginx的HTTP基本认证模块(HTTP AuthBasic)可以实现。这个模块提供基于用户名与密码的验证来保护你的站点或站点的一部分。
下面同样以虚拟主机[bbs.test.com]为例:1)添加认证指令 在虚拟主机location中添加两条参数
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/webpass;
解释:
auth_basic
指令包含一个具有测试用户名和密码的HTTP基本认证,指定的参数将用于认证域。如果将值设置为“off”则忽略下级指令继承的动作。
auth_basic_user_file
指令为验证域指定了密码文件,0.6.7版本以后这里指定的文件是nginx.conf所在目录的相对路径,而不是–prefix指定的路径。
“Restricted" 单词将会出现在第一次访问Nginx站点的弹出框内。
webpass是一个文件,位于conf目录下。注意如果你 设置的是 conf/webpass,这个webpass文件应该在conf/conf/目录下。或者避免麻烦,直接用绝对路径。
如虚拟主机 bbs.test.com中的配置
[root@node3 nginx]# vim conf.d/vhost.conf
server {
listen 80;
server_name bbs.test.com;
location / {
root html/bbs;
index index.html index.htm;
}
location /nginx_status {
stub_status on;
access_log off;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/webpass;
}
}
2)创建账号密码, 此账号密码就是用户访问网站时需要输入的。 需要安装创建用户工具:
yum install httpd-tools
创建用户tom并配置密码
[root@node3 nginx]# htpasswd -cm /usr/local/nginx/webpass tom
New password:
Re-type new password:
Adding password for user tom
[root@node3 nginx]# more /usr/local/nginx/webpass
tom:$apr1$UoHoNkgY$qAh73D31vskaCTGHL55m01
配置完成可以在另一条机器上访问,最好是安装文本浏览器来访问elinks
[root@node2 ~]# yum install elinks -y
通过elinks访问成功时出现需要账号和密码进行用户认证
[root@node2 ~]# elinks http://bbs.test.com/nginx_status
4.配置nginx rewrite,要求如果访问不存在的任意网页都重定向到错误页面,错误页面内容自行定义。
1)配置虚拟主机中网页信息;
[root@node3 nginx]# vim /usr/local/nginx/conf.d/vhost.conf
server {
listen 80;
server_name blog.test.com;
location / {
root html/blog;
index index.html index.htm;
if (!-f $request_filename) { #如果不匹配要求则会跳转到err.html网页
rewrite /.* /err.html permanent;
}
}
}
2)为错误页面添加信息
[root@node3 nginx]# echo "page not found" > /usr/local/nginx/html/blog/err.html
3)可以在另一台主机上配置hosts进行测试