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

注:初始化时最好根据自己的需求增加相关模块的编译参数,这里由于课程需要暂不加参数。



编译&&安装

make &&  make install



核心文件目录

同样支持-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部分,增加包含虚拟主机配置文件的规则

Nginx安装&默认虚拟主机&Nginx用户认证&Nginx域名重定向_nginx



创建相应目录

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安装。

yum install -y httpd

生成密码文件

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



检测&&重新加载

ctrl+r :-t
ctrl+r :-s



结果测试

[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/