Nginx安装&默认虚拟主机&Nginx用户认证&Nginx域名重定向
原创
©著作权归作者所有:来自51CTO博客作者lemon时雨的原创作品,请联系作者获取转载授权,否则将追究法律责任
12.6 Nginx安装
下载Nginx源码包
可去官网(http://nginx.org)下载至Windows,用rz命令上传
[root@linux-10 ~]# cd /usr/local/src
[root@linux-10 src]# rz
解压缩
[root@linux-10 src]# tar -zxvf nginx-1.14.0.tar.gz
初始化
[root@linux-10 src]# cd nginx-1.14.0
[root@linux-10 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx
注:初始化时最好根据自己的需求增加相关模块的编译参数,这里由于课程需要暂不加参数。
编译&&安装
核心文件目录
同样支持-t选项
[root@linux-10 nginx-1.14.0]# ls /usr/local/nginx/sbin/
nginx
[root@linux-10 nginx-1.14.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
创建启动脚本
vim /etc/init.d/nginx //复制如下内容
(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx )
修改启动脚本文件权限
chmod 755 /etc/init.d/nginx
将服务添加至系统服务列表并设置开机启动
chkconfig --add nginx
chkconfig nginx on
修改Nginx配置文件
将原配置文件重命名,创建一个新的配置文件
[root@linux-10 nginx-1.14.0]# cd /usr/local/nginx/conf
[root@linux-10 conf]# mv nginx.conf nginx.conf.bak
vim nginx.conf //写入如下内容
(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)
user nobody nobody; //定义服务所属用户
worker_processes 2; //定义进程数量
error_log /usr/local/nginx/logs/nginx_error.log crit; //定义错误日志
pid /usr/local/nginx/logs/nginx.pid; //定义pid
worker_rlimit_nofile 51200; //定义最大可以打开的文件数量
events
{
use epoll;
worker_connections 6000; //定义最大连接数
}
注:上述仅是部分代码
fastcgi_pass unix:/tmp/php-fcgi.sock;
server配置中的监听端口要与PHP中的配置文件保持一致
检查并启动Nginx服务
[root@linux-10 conf]# /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
[root@linux-10 conf]# /etc/init.d/nginx start
Starting nginx (via systemctl): [ 确定 ]
查看80端口是否启用
[root@linux-10 conf]# netstat -lntp |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4066/nginx: master
测试PHP解析
在/usr/local/nginx/html/下编写测试文件1.php
vim 1.php
<?php
echo "test";
访问测试
[root@linux-10 html]# curl localhost/1.php
test
12.7 默认虚拟主机
因为Nginx支持include语法,所以可以在配置文件中定义虚拟主机配置文件(类似于Apache)
修改Nginx配置文件
删除原有配置文件中的server部分,增加包含虚拟主机配置文件的规则
创建相应目录
mkdir /usr/local/nginx/conf/vhost
编辑虚拟主机配置文件
server
{
listen 80 default_server; // 有这个标记的就是默认虚拟主机
server_name lem.com; // 指定网站域名
index index.html index.htm index.php; //指定索引页
root /data/wwwroot/default; //指定网站存放位置
}
创建网站存放目录
[root@linux-10 vhost]# mkdir -p /data/wwwroot/default/
编辑测试文件
vim index.html
This is a default site.
检测配置文件,无误后重新加载
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
注:重新加载相对于重启服务而言,它在配置文件有错误时,将不会重新加载,即不会破坏原有正在运行的Nginx服务。
测试连通性
[root@linux-10 conf]# curl localhost
This is a default site.
[root@linux-10 conf]# curl -x127.0.0.1:80 123.com
This is a default site.
12.8 Nginx用户认证
创建虚拟主机
在vhost目录下,每一个虚拟主机配置文件就是一个虚拟主机
vim /usr/local/nginx/conf/vhost/test.com.conf
server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
location /
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}
生成密码文件
生成密码文件需要借助Apache的htpasswd工具进行生成,如果本机存在Apache可直接使用,否则需要yum安装。
生成密码文件
htpasswd -c /usr/local/nginx/conf/htpasswd lem
测试配置并重新加载
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
效果测试
[root@linux-10 vhost]# curl -x 127.0.0.1:80 test.com -I
HTTP/1.1 401 Unauthorized
Server: nginx/1.14.0
Date: Fri, 08 Jun 2018 04:28:28 GMT
Content-Type: text/html
Content-Length: 195
Connection: keep-alive
WWW-Authenticate: Basic realm="Auth"
针对目录进行用户认证
location /admin/ //在配置文件中填写相应目录
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}
针对网页进行用户认证
location ~ admin.php //location为定位语句,匹配指定内容
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}
12.9 Nginx域名重定向
编辑虚拟主机配置文件
server
{
listen 80;
server_name test.com test1.com test2.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com' ) {
rewrite ^/(.*)$ http://test.com/$1 permanent;
}
}
Nginx中支持识别多个域名,无需使用别名
permanent为永久重定向,状态码为301,如果写redirect则为302
检测&&重新加载
结果测试
[root@linux-10 vhost]# curl -x 127.0.0.1:80 test2.com -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0
Date: Fri, 08 Jun 2018 04:51:34 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://test.com/