博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx安装、默认虚拟主机、用户认证、nginx中PHP解析
阅读量:7108 次
发布时间:2019-06-28

本文共 13770 字,大约阅读时间需要 45 分钟。

hot3.png

12.6 Nginx安装

准备工作

安装包

[root@1 ~]# cd /usr/local/src/下载安装包:[root@1 src]# wget http://nginx.org/download/nginx-1.12.1.tar.gz解压:[root@1 src]# tar zxvf nginx-1.12.1.tar.gz

安装

环境配置

[root@1 src]# cd nginx-1.12.1/[root@1 nginx-1.12.1]# ./configure --prefix=/usr/local/nginx#如果需要支持某模块,可以在此添加,如HTTPS、SSL等

编译&安装

[root@1 nginx-1.12.1]# make && make install[root@1 nginx-1.12.1]# echo $?0[root@1 nginx-1.12.1]# cd /usr/local/nginx/[root@1 nginx]# lsconf  html  logs  sbin

配置

添加&启动服务

创建启动脚本:[root@1 nginx]# vim /etc/init.d/nginx#!/bin/bash# chkconfig: - 30 21# description: http service.# Source Function Library. /etc/init.d/functions# Nginx SettingsNGINX_SBIN="/usr/local/nginx/sbin/nginx"NGINX_CONF="/usr/local/nginx/conf/nginx.conf"NGINX_PID="/usr/local/nginx/logs/nginx.pid"RETVAL=0prog="Nginx"start() {    echo -n $"Starting $prog: "    mkdir -p /dev/shm/nginx_temp    daemon $NGINX_SBIN -c $NGINX_CONF    RETVAL=$?    echo    return $RETVAL}stop() {    echo -n $"Stopping $prog: "    killproc -p $NGINX_PID $NGINX_SBIN -TERM    rm -rf /dev/shm/nginx_temp    RETVAL=$?    echo    return $RETVAL}reload(){    echo -n $"Reloading $prog: "    killproc -p $NGINX_PID $NGINX_SBIN -HUP    RETVAL=$?    echo    return $RETVAL}restart(){    stop    start}configtest(){    $NGINX_SBIN -c $NGINX_CONF -t    return 0}case "$1" in  start)        start        ;;  stop)        stop        ;;  reload)        reload        ;;  restart)        restart        ;;  configtest)        configtest        ;;  *)        echo $"Usage: $0 {start|stop|reload|restart|configtest}"        RETVAL=1esacexit $RETVAL检查脚本语法:[root@1 nginx]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful更改权限:[root@1 nginx]# chmod 755 /etc/init.d/nginx添加到系统服务:[root@1 nginx]# chkconfig --add nginx[root@1 nginx]# chkconfig nginx on

更改配置文件

[root@1 nginx]# cd /usr/local/nginx/conf/注释掉Nginx自带脚本,创建自己的脚本:[root@1 conf]# mv nginx.conf nginx.conf.bak[root@1 conf]# vim nginx.confuser nobody nobody;#定义启动Nginx的用户worker_processes 2;#定义子进程数目error_log /usr/local/nginx/logs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 51200;#指定Nginx最多可打开的文件数目events{    use epoll;    worker_connections 6000;    #进程最大连接数}http{    include mime.types;    default_type application/octet-stream;    server_names_hash_bucket_size 3526;    server_names_hash_max_size 4096;    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'    ' $host "$request_uri" $status'    ' "$http_referer" "$http_user_agent"';    sendfile on;    tcp_nopush on;    keepalive_timeout 30;    client_header_timeout 3m;    client_body_timeout 3m;    send_timeout 3m;    connection_pool_size 256;    client_header_buffer_size 1k;    large_client_header_buffers 8 4k;    request_pool_size 4k;    output_buffers 4 32k;    postpone_output 1460;    client_max_body_size 10m;    client_body_buffer_size 256k;    client_body_temp_path /usr/local/nginx/client_body_temp;    proxy_temp_path /usr/local/nginx/proxy_temp;    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;    fastcgi_intercept_errors on;    tcp_nodelay on;    gzip on;    gzip_min_length 1k;    gzip_buffers 4 8k;    gzip_comp_level 5;    gzip_http_version 1.1;    gzip_types text/plain application/x-javascript text/css text/htm     application/xml;    server    #虚拟主机    {        listen 80;        server_name localhost;        index index.html index.htm index.php;        root /usr/local/nginx/html;        location ~ \.php$        #配置PHP解析        {            include fastcgi_params;            fastcgi_pass unix:/tmp/php-fcgi.sock;            fastcgi_index index.php;            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;        }        }}检测语法:[root@1 conf]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful启动Nginx服务:[root@1 conf]# /etc/init.d/nginx startStarting nginx (via systemctl):                            [  确定  ]

至此,Nginx基础配置完成!

检测

[root@1 conf]# curl localhostWelcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.

For online documentation and support please refer tonginx.org.

Commercial support is available atnginx.com.

Thank you for using nginx.

 

检测PHP解析

[root@1 conf]# vim /usr/local/nginx/html/1.php
[root@adailinux conf]# curl localhost/1.phpwelcom to 1-nginx text.

 

常见的502问题解决

对于LNMP来说,最常见的就是502问题,LNMP环境搭建完成后,一访问网站直接提示“502 Bad Gateway”。主要原因大致分为两种:

(1)配置错误

在Nginx配置中有这么一段:

location ~ \.php$        #配置PHP解析        {            include fastcgi_params;            fastcgi_pass unix:/tmp/php-fcgi.sock;            fastcgi_index index.php;            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;        }

如果把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,以此类推。

(3)listen.mode

在php-fpm配置文件中有参数listen.mode,该参数时指定php-fpm所监听的socket文件listen = /tmp/php-fcgi.sock的权限,如果在此不指定权限,默认权限为440(只允许root用户及root组读取),之后在Nginx中监听该文件时就会提示502错误,解决办法就是给予socket文件读写权限666。

如果遇到其它的较为少见的错误,我们可以修改nginx的错误日志(/usr/local/nginx/logs/nginx_error.log)的级别,在配置文件/usr/local/nginx/conf/nginx.conf中将crit改为debug,使其记录最多的日志内容,这样方便我们排查错误,但是配置更改完成后要记得将级别改回crit,避免日志文件占用太多磁盘空间。

12.7 Nginx默认虚拟主机

编辑Nginx配置文件,删除原有server内容,添加如下内容:

创建虚拟主机

添加虚拟主机目录

[root@1 ~]# cd /usr/local/nginx/conf[root@1 conf]# vim /usr/local/nginx/conf/nginx.conf……include vhost/*.conf; #创建一个虚拟主机配置文件子目录(相当于增加子虚拟主机) 创建配置文件中的目录文件:[root@1 conf]# mkdir vhost

注: “nginx.conf”文件中支持“include”语法。

增加一台虚拟主机:

[root@1 conf]# cd vhost[root@1 vhost]# vim aaa.com.confserver{    listen 80 default_server;     #有'default_server'标记的就是默认虚拟主机    server_name aaa.com;    index index.html index.htm index.php;    root /data/wwwroot/default;}创建配置文件中指定的root目录:[root@1 vhost]# mkdir -p /data/wwwroot/default

为虚拟主机添加内容

进入目录,添加索引页:[root@1 vhost]# cd /data/wwwroot/default[root@1 default]# vim index.htmlThis is the default directory.[root@1 default]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful  重启或重新加载(二选一):[root@1 default]# /usr/local/nginx/sbin/nginx -s reload[root@1 default]# /usr/local/nginx/sbin/nginx restart

检测

[root@1 default]# curl localhostThis is the default directory.

 

即:添加一台虚拟主机,所谓默认虚拟主机就是/usr/local/nginx/conf/vhost目录下虚拟主机配置文件中有“default_server”标记的虚拟主机。

12.8 Nginx用户认证

创建一台虚拟主机:

在vhost目录下操作:[root@1 vhost]# vim test.com.confserver{    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命令:

[root@1 vhost]# yum install -y httpd

创建密码文件:

[root@1 vhost]# htpasswd -c /usr/local/nginx/conf/htpasswd adaiNew password: Re-type new password: Adding password for user adai

即,创建密码文件htpasswd,指定用户为adai。‘-c’=create,创建该密码文件,如果是第二次添加用户,不用加该选项,所添加的用户名和密码会保存到该文件下。

重载:

[root@1 vhost]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@1 vhost]# /usr/local/nginx/sbin/nginx -s reload

说明: 使用reload而不使用restart的好处是能避免因配置文件中存在错误而无法正常启动!reload不会破坏原有运行环境。

添加指定目录

添加虚拟主机配置文件指定的根目录:[root@1 vhost]# mkdir /data/wwwroot/test.com添加索引页:[root@1 vhost]# echo "This is test.com" >/data/wwwroot/test.com/index.html

检测

[root@1 vhost]# curl -x127.0.0.1:80 test.com -uadai:123456This is test.com

注: 如果不指定用户名和密码,会报错401(需要用户认证);如果为创建虚拟主机根目录会报错404(找不到指定目录);如果指定目录中没有添加索引页(.html或.php文件)会报错404(文件存在错误)。

配置虚拟主机PHP解析:

编辑配置文件,添加如下location内容:

[root@1 vhost]# vim /usr/local/nginx/conf/vhost/test.com.conf    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;        }}

注意: “fastcgi_param SCRIPT_FILENAME”该行路径要和站点根目录路径一致,如图:

检测:

[root@1 vhost]# curl -x127.0.0.1:80 test.com/index.phpThis is a test of .php

注: 此处为了方便检测,已将用户认证关闭。

12.9 Nginx域名重定向

编辑虚拟主机配置文件:

[root@1 vhost]# vim test.com.confserver{    listen 80;    server_name test.com test2.com test3.com;    #为一个IP配置多个域名,此时权重会改变,所以需要使用户访问其他域名时全部跳转到第一个域名    index index.html index.htm index.php;    root /data/wwwroot/test.com;    if ($host != 'test.com' ) {        rewrite  ^/(.*)$  http://test.com/$1  permanent;    }    #使用rewrite模块}[root@1 vhost]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@1 vhost]# /usr/local/nginx/sbin/nginx -s reload

说明: 使用rewrite模块进行域名重定向实现域名跳转功能。

检测

[root@1 vhost]# curl -x127.0.0.1:80 test2.com -IHTTP/1.1 301 Moved PermanentlyServer: nginx/1.12.1Date: Thu, 10 Aug 2017 10:41:30 GMTContent-Type: text/htmlContent-Length: 185Connection: keep-aliveLocation: http://test.com/

即,301:永久域名跳转,跳转后的地址为:Location: 

扩展:Nginx配置文件详解

#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error.log info;#进程文件pid /var/run/nginx.pid;#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。worker_rlimit_nofile 65535;#工作模式与连接数上限events{#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。use epoll;#单个进程最大连接数(最大连接数=连接数*进程数)worker_connections 65535;}#设定http服务器http{include mime.types; #文件扩展名与文件类型映射表default_type application/octet-stream; #默认文件类型#charset utf-8; #默认编码server_names_hash_bucket_size 128; #服务器名字的hash表大小client_header_buffer_size 32k; #上传文件大小限制large_client_header_buffers 4 64k; #设定请求缓client_max_body_size 8m; #设定请求缓sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。tcp_nopush on; #防止网络阻塞tcp_nodelay on; #防止网络阻塞keepalive_timeout 120; #长连接超时时间,单位是秒#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;#gzip模块设置gzip on; #开启gzip压缩输出gzip_min_length 1k; #最小压缩文件大小gzip_buffers 4 16k; #压缩缓冲区gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)gzip_comp_level 2; #压缩等级gzip_types text/plain application/x-javascript text/css application/xml;#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。gzip_vary on;#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用upstream blog.ha97.com {#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。server 192.168.80.121:80 weight=3;server 192.168.80.122:80 weight=2;server 192.168.80.123:80 weight=3;}#虚拟主机的配置server{#监听端口listen 80;#域名可以有多个,用空格隔开server_name www.ha97.com ha97.com;index index.html index.htm index.php;root /data/www/ha97;location ~ .*\.(php|php5)?${fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;}#图片缓存时间设置location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 10d;}#JS和CSS缓存时间设置location ~ .*\.(js|css)?${expires 1h;}#日志格式设定log_format access '$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/ha97access.log access;#对 "/" 启用反向代理location / {proxy_pass http://127.0.0.1:88;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#以下是一些反向代理的配置,可选。proxy_set_header Host $host;client_max_body_size 10m; #允许客户端请求的最大单文件字节数client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传}#设定查看Nginx状态的地址location /NginxStatus {stub_status on;access_log on;auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd;#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。}#本地动静分离反向代理配置#所有jsp的页面均交由tomcat或resin处理location ~ .(jsp|jspx|do)?$ {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://127.0.0.1:8080;}#所有静态文件由nginx直接读取不经过tomcat或resinlocation ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${ expires 15d; }location ~ .*.(js|css)?${ expires 1h; }}}

转载于:https://my.oschina.net/u/3706800/blog/1800589

你可能感兴趣的文章
Isilon上数据是如何存放的?
查看>>
【centos6】给php命令设置全局变量三种方式
查看>>
关于Python ,requests的小技巧
查看>>
(MariaDB)开窗函数用法
查看>>
tensorflow 线性回归解决 iris 2分类
查看>>
Maven的安装与配置
查看>>
腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经...
查看>>
Easyui 弹出加载中的遮罩的两种方法
查看>>
[RK3288][Android6.0] USB OTG模式及切换【转】
查看>>
嘿!不用太过于担心的单点故障
查看>>
修改Ubuntu的aptget源为阿里源的方法
查看>>
Android Camera2 拍照入门学习
查看>>
Maven镜像更换为阿里云中央仓库
查看>>
.NET+PostgreSQL实践与避坑指南
查看>>
pandas DataFrame(1)
查看>>
CopyOnWriteArraySet源码解析
查看>>
找工作面试会遇到哪些坑(社招篇)
查看>>
几种交换两个数函数(swap函数)的写法和解析
查看>>
cloudera安装hadoop集群和相关服务
查看>>
手机归属地查询-IP地址查询-身份证查询-域名备案查询--Api接口
查看>>