12.6 Nginx安装
下载安装包(再官网下载stable最新稳定版):
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.1.tar.gz
tar zxf nginx-1.12.1.tar.gz
配置安装环境:
cd nginx-1.12.1/
./configure --prefix=/usr/local/nginx(可以添加模块,按需求进行配置,https等后加)
编译and安装:
make && make install
echo $? (确定安装是否出错)
创建启动脚本:
vim /etc/init.d/nginx
复制网站中的配置内容,开始配置后每次完成-t进行语法检查
(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx )
/usr/local/nginx/sbin/nginx -t
chmod 755 /etc/init.d/nginx (更改文件权限)
chkconfig --add nginx (先加入系统服务再设置开机启动)
chkconfig nginx on
开始配置文件:
cd /usr/local/nginx/conf/
mv nginx.conf nginx.conf.bak (这里mv用法为注释掉本身的配置信息,创建自己的脚本)
vim /usr/local/nginx/conf/nginx.conf
复制网站中的配置内容,每次完成-t进行语法检查
sercer就跟httpd的虚拟主机配置相同,一个server就是一个虚拟主机
location php 为配置解析php
(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)
/usr/local/nginx/sbin/nginx -t
到这里安装成功,开始启动nginx:
/etc/init.d/nginx start
curl localhost检测
ps aux | grep nginx
netstat -lntp 查看开启的服务
在浏览器测试前,先确定hosts添加了,这一块都混淆了上次实验两个别名出现的问题下次咨询
测试php的解析:
vim /usr/local/nginx/html/666.php
<?php
echo "这里随便写,复制个故事如何";
curl localhost/666.php显示上面的语句表示成功
参考的阿呆同学的502问题
对于LNMP来说,最常见的就是502问题,LNMP环境搭建完成后,一访问网站直接提示“502 Bad Gateway”。主要原因大致分为两种:
(1)配置错误
在Nginx配置中location的php配置中
如果把fastcgi_pass(这是用来通信的)后面指定的路径配置错了,那么就会出现502错误,因为Nginx找不到php-fpm了,fastcgi _pass后面可以跟socket也可以跟IP:port,默认监听地址为:127.0.0.1:9000。
注意: 这里用两种形式都可以,但是两个配置文件(Nginx和php-fpm)中的形式一定要统一,不然绝对502;如果用套接字形式的话,socket文件的路径一定要对,不然也还是502。
(2)资源耗尽
LNMP架构处理PHP时,是Nginx直接调取后端的php-fpm服务,如果Nginx的请求量偏高,而我们又没给php-fpm配置足够的子进程数,那么总有php-fpm资源耗尽的时候,一旦耗尽Nginx找不到php-fpm,此时也会导致502错误出现。解决办法就是调整php-fpm.conf中的pm.max_children数值,使其增加。但也不能无限制增加,因为服务器的资源有限。4G内存机器如果只跑php-fpm和Nginx,不跑MySQL服务,pm.max _children可以设置为150,尽量不要超过该数值,8G内存设置为300,以此类推。
如果遇到其它的较为少见的错误,我们可以修改nginx的错误日志(/usr/local/nginx/logs/nginx_error.log)的级别,在配置文件/usr/local/nginx/conf/nginx.conf中将crit改为debug,使其记录最多的日志内容,这样方便我们排查错误,但是配置更改完成后要记得将级别改回crit,避免日志文件占用太多磁盘空间。
12.7默认虚拟主机
添加虚拟主机目录:
cd /usr/local/nginx/conf
vim /usr/local/nginx/conf/nginx.conf
include vhost/*.conf (在最后面增加这条,删除下面server的信息,为创建一个虚拟主机配置文件的一个子目录,和httpd加一条一样)
创建上面配置文件的目录文件:
mkdir /usr/local/nginx/conf/vhost
然后增加一台虚拟主机:
cd /usr/local/nginx/conf/vhost/ 进入这个目录文件(虚拟主机目录)
vim aaa.com.conf 给虚拟机编辑如下内容:
这个就是虚拟主机的目录就是:vim /usr/local/nginx/conf/vhost/aaa.com.conf
server
{
listen 80 default_server; (有default_serve就是默认虚拟主机)
server_name aaa.com; (定义网站名字)
index index.html index.htm index.php;
root /data/wwwroot/default; (定义配置文件目录,还没创建)
}
创建虚拟主机配置文件的目录:
mkdir -p /data/wwwroot/default/
cd /data/wwwroot/default/ 进入此目录
echo “This is a default site.”>/data/wwwroot/default/index.html
(vim /data/wwwroot/default/index.html创建了一个index给其中添加内容)
/usr/local/nginx/sbin/nginx -t (这里会给一些信息百度一下不用理会)
/usr/local/nginx/sbin/nginx -s reload 重新加载
或者 /usr/local/nginx/sbin/nginx restart
进行检测:
curl localhost
curl -x127.0.0.1:80 123.com
(无论什么域名,只要解析指向到本服务器,都能访问到默认虚拟主机站点)
给虚拟主机配置PHP解析:
在配置文件中继续加入
server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
location ~ .php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
}
}
检查:
curl -x127.0.0.1:80 aaa.com/index.php
12.8 Nginx用户认证
编辑虚拟主机配置文件,换了一个test
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; #用户的密码文件
}
}
上述“location”中的内容即为设定用户认证。在此是为整个站点设定的用户认证,如果只是为某个目录设置用户认证,在location所在行进行编辑就好,如:location /admin 目录。也可以对某种请求(即对一个普通文件)设定用户认证,如location ~ admin.php()使用 ~ 进行匹配
创建密码文件在此需要使用Apache的/usr/local/apache/bin/htpasswd命令,如果机器中已经有Apache,可以直接使用,如果没有,需要使用yum安装httpd命令:
yum install -y httpd
htpasswd -c /usr/local/nginx/conf/htpasswd quyifan (设置密码用到htpasswd与httpd相同)
cat /usr/local/nginx/conf/htpasswd查看密码
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload(如果配置文件有错误,实际不会生效,restart会有风险)
添加这个test虚拟主机配置文件指定的根目录(放文件的地方):
mkdir /data/wwwroot/test.com
echo “test.com”>/data/wwwroot/test.com/index.html
curl -x127.0.0.1:80 test.com -I//状态码为401说明需要验证
curl -x127.0.0.1:80 test.com -uquyifan:passwd 访问状态码变为200
编辑windows的hosts文件,然后在浏览器中访问test.com会有输入用户、密码的弹窗
还可以针对目录的用户认证
location /admin/(直接在这里添加需要认证的目录)
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
测试成功,针对/admin/做了用户认证
之后会多次匹配location认证,在这里匹配需求
最好设置好curl进行测试
加:给虚拟主机配置php解析:
server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com; (这里是站点根目录,下面的fastcgi_param要与这个一致)
location ~ .php$ #配置PHP解析
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
}
12.9 Nginx域名重定向
更改vim /usr/local/nginx/conf/vhost/test.com.conf
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; (这里指不是rest.com的全部跳转)
}
}
server_name后面支持写多个域名,这里要和httpd的做一个对比
permanent为永久重定向,状态码为301,如果写redirect则为302
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -x127.0.0.1:80 test2.com/index.html -I 301重定向
扩展
nginx.conf 配置详解 http://www.ha97.com/5194.html http://my.oschina.net/duxuefeng/blog/34880