第 四 十 三 天:nginx 的 相 关 问 题

nginx 设置自定义header -----------------------------------------

vim   nginx.conf   在http模块中加入:

add_header  myheader  "the coments of myheader";

这里的myheader 是自定义的名字,你自己随便写。

加完后,测试:curl  -I  http://IP

Nginx中禁止访问.txt文件----------------------------------------

location ~* \.(txt|doc)$ {
               if (-f $request_filename) {
                  root /home/domain/public_html/test;
                  break;
                  }
               }

Nginx 404 跳转至首页--------------------------------------------

之前用Apache的时候,只需要设置ErrorDocument 404 /404.php

就可以在 404.php 中根据不同的 REQUEST_URI 跳转到不同的页面去,让从搜索引擎过来的失效URL可以跳转到新的地址去

nginx 设置是这样的:

error_page 404  /404.php;

另外也可以通过rewrite规则实现在 rewrite rule 的最后增加

if (!-e $request_filename) {
      rewrite ^(.*)$ /404.php last;
}

nginx的301与302如何配置-----------------------------------------

#301跳转设置:
server {
listen 80;
server_name 123.com;
rewrite ^/(.*) http://456.com/$1 permanent;
access_log off;
}
#302跳转设置:
server {
listen 80;
server_name 123.com;
rewrite ^/(.*) http://456.com/$1 redirect;
access_log off;
}

nginx 配置虚拟目录并支持php-------------------------------------

问题:www.111.com 站点的root目录为 /data/web/ ,现在想在www.111.com 下放一个站点,www.111.com/abc/ 但不能直接在/data/web/下创建abc目录,要放在 /data1/abc/下。

解决办法:使用nginx的alias功能实现虚拟目录

在配置文件中加入

location ~ /abc/(.*)$ {

alias /data1/abc/$1;

}

当然,alias后面跟的目录可以随意,只要是你放程序的目录即可。也就是说,alias后面定义的/data1/abc/ 也可以使/data1/123/此时,访问图片,网页,css以及js都没有问题,但是访问php就会报404. 怎么办?

继续加如下配置,但注意,要加在上面那段location配置的前面,否则不生效。

location ~ /abc/.+\.php$ {
            root /data1/;
            rewrite /abc/(.*\.php) /$1 break;
            include fastcgi_params;
            fastcgi_pass  unix:/tmp/php-fcgi.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /data1/abc/
$fastcgi_script_name;
}

到此,也可以支持php了。

用Nginx配置https加密站点----------------------------------------

一、Nginx安装

安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块。

Nginx安装方法:

./configure --user=username --group=groupname --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make && make install

二、生成证书

$ cd /usr/local/nginx/conf
$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

三、修改Nginx配置:

server
{
listen 443;
server_name test.sina.com.cn;
ssl                  on;
ssl_certificate      /usr/local/nginx/conf/server.crt;
ssl_certificate_key  /usr/local/nginx/conf/server.key;
}

nginx 限定下载速度---------------------------------------------

nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个组件来对目录进行限速。

http {
limit_zone   one  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn   one  1;
limit_rate 300k;
}
}
}

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

limit_conn one 1;限制每个IP只能发起一个并发连接。

limit_rate 300k;对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。还可以用来显示每个IP的并发数

nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量

1.添加limit_zone

这个变量只能在http使用

vi /usr/local/nginx/conf/nginx.conf

limit_zone one $remote_addr 10m;

2.添加limit_conn   这个变量可以在http, server, location使用

我只限制一个站点,所以添加到server里面

vim /usr/local/nginx/conf/vhost/taobap.cn.conf

limit_conn   one 10;

3.重启nginx :killall -HUP nginx

========================================练习题===================================

1. 到mysql官方下载一个源码包,尝试编译安装,编译参数可以参考我们已经安装过的mysql的编译参数。操作略,有问题的话把问题发出来。mysql官网

http://dev.mysql.com/downloads/mysql/5.1.html#downloads  选择source code

查看mysql编译参数的方法是 ?cat /usr/local/mysql/bin/mysqlbug|grep configure

2. mysql的配置文件my.cnf,是否可以放到除了/etc/目录下的其他目录下?

可以放到其他目录下,不过启动的时候需要指定配置文件,或者在启动脚本中定义一下配置文件的路径

手动启动mysql的命令:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/my.cnf --user=mysql --datadir=/data/mysql

或者在启动脚本中/etc/init.d/mysqld 中,搜索conf=/etc/my.cnf,并修改

3. 比较一下,lamp环境和lnmp环境编译php时,编译参数有哪些区别?

lamp的php有指定 apxs,lnmp中没有指定;lnmp中有一项叫做 --enable-fpm,lamp没有

4. 安装好php后,比较一下lamp的php和lnmp的php的目录结构有什么不同?

lnmp的php比lamp的php多出来几个目录:sbin, share, var

5. 想一想,lamp环境下的php安装目录 /usr/local/php 是否可以删除?

可以删除掉,因为lamp中的php是作为apache的一个动态模块libphp5.so来调用的,唯一有影响的是如果指定了php的配置文件php.ini在php的目录下,如果删除后则配置文件失效。

6. php的配置文件是什么? php-fpm 的配置文件是什么?

php的配置文件时php.ini, php-fpm的配置文件时 php-fpm.conf

7. 如何检测nginx配置文件是否有错?如何检测php-fpm的配置文件是否有错?

/usr/local/nginx/sbin/nginx -t

/usr/local/php/sbin/php-fpm -t

8. 在本章中,出现了两次 "chmod 755 /etc/init.d/xxx" 其中xxx 为php-fpm 和 nginx, 想一想为什么要更改他们的权限,如果不改,会有什么问题?

因为php-fpm和nginx是启动脚本,脚本执行必须要有执行权限,如果不给执行权限,不能正确把它们加入到系统服务中。

9. nginx是如何做到解析php文件的?它是如何和php联系在一起的?

nginx解析php,是以代理的方式代理的php-fpm,在nginx的配置文件中有这样一段:

location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /backup/sphinx/build/html
$fastcgi_script_name;
    }

这就是用来指定php-fpm的,nginx本身不能解析php,它只是一个简单的web服务软件,但nginx有一个很好的功能就是可以作为代理服务器,而php-fpm是可以解析php的,所以只要nginx代理一下php-fpm就可以解析php啦。

10. 配置nginx的访问日志,并编写日志切割脚本按天切割。

配置nginx的日志,首先需要定义一下日志格式,这个格式在 nginx.conf的 httpd模块下配置,参考格式:

log_format main1 ‘$proxy_add_x_forwarded_for - $remote_user 
[$time_local] ‘ 
                      ‘"$request" $status $body_bytes_sent ‘
                      ‘"$http_referer" "$http_user_agent"‘;

其中 main1为日志格式的名字,这个会用到。然后在虚拟主机配置段中,也就是server部分中配置加上

access_log /var/log/xxx/access.log  main1;

日志切割脚本(已知访问日志为/var/log/xxx/access.log):

#! /bin/bash
d=`date -d "-1 day" +%Y%m%d`
/bin/mv /var/log/xxx/access.log /var/log/xxx/$d-access.log
/bin/kill -HUP `cat /usr/local/nginx/logs/nginx.pid`  //其中nginx的pid文件为/usr/local/nginx/logs/nginx.pid
#假如脚本的名字为 /usr/local/sbin/nginx_logrotate.sh,加入计划任务

0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh

11. 配置Nginx域名重定向,比如一个虚拟主机支持多个域名访问,abc.com  和 123.com 那么让123.com的访问跳转到 abc.com

在相应的虚拟配置文件中加入:

if ($host != ‘abc.com‘ ) {
        rewrite  ^/(.*)$  http://abc.com/$1  permanent;
    }

12. 配置Nginx的用户验证

需要先安装 htpasswd命令: yum install -y httpd

htpasswd -c /usr/local/nginx/conf/htpasswd  test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数

在nginx相应虚拟主机配置文件中添加

location  / {
                      root /data/www/wwwroot/count;
                      auth_basic              "Auth";
                      auth_basic_user_file   
/usr/local/nginx/conf/htpasswd;
            }

13. 针对Nginx站点,设置禁止某个目录下的php程序解析

比如说,禁止abc目录下的php解析:

location ~ .*abc/.*\.php?$
        {
         deny all;
        }

14. 使用Nginx代理一个站点

例如,想在我们的nginx服务器上代理www.baidu.com, 可以创建一个新的虚拟配置文件baidu.conf

server {
            listen 80;
            server_name www.baidu.com;
             proxy_set_header Host   $host;   
            location / {
                proxy_pass      http://61.135.169.125/;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for;
            }
#            access_log  /tmp/1.log;
        }

15. 配置nginx限制只让某个ip访问

在相应的虚拟主机配置文件中,加入

allow 1.1.1.1;

allow 2.2.2.2;

deny all;

16. 设置Nginx 防盗链,比如只想让www.lishiming.net 这个域名的referer访问,其他站点不能访问

首先一点需要明确,防盗链是针对图片或者其他静态文件来设置的,比如我不想让其他网站引用我网站的图片,就可以这样设置防盗链。在相应虚拟配置文件中加入:

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|
jpeg|bmp|xls)$ {   
                valid_referers none blocked server_names  
www.lishiming.net;  // 对这些域名的网站不进行盗链。
                if ($invalid_referer) {
                        return 403;
                        }
                }

当还可以写多个白名单域名,或者使用通配符:

valid_referers none blocked server_names  *.lishiming.net *.baidu.com;

有时,我们也有这样的需求,如果别的网站引用了我们的图片,可以让它显示成我们自己指定的一张图片:

               if ($invalid_referer) {
                        rewrite ^/ 
http://www.example.com/nophoto.gif;
                        }

17. Nginx设置根据user_agent来限制访问,比如禁止baidu的蜘蛛访问站点baidu蜘蛛的user_agent 为 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

所以,我们可以写成这样:

    location / {
            if ($http_user_agent ~ ‘Baiduspider‘){
                return 403;
            }
        }

18. Nginx配置虚拟目录

问题:www.111.com 站点的root目录为 /data/web/ ,现在想在www.111.com 下放一个站点,www.111.com/abc/ 但不能直接在/data/web/下创建abc目录,要放在 /data1/abc/下。

解决:使用nginx的alias功能实现虚拟目录,在配置文件中加入

location ~ /abc/(.*)$ {
       alias /data1/abc/$1;
}

19. Php-fpm.conf 中配置多个pool,如何针对每一个pool配置open_basedir 以及slow_log

php-fpm.conf中可以配置多个pool,并且可以针对每一个pool配置open_basedir和slow_log

首先,php-fpm.conf的配置文件格式为:

[global]
...
...
...
[www.domain1.com]
...
...
...
[www.domain2.com]
...
...
...

配置open_basedir和slow_log需要在相应的pool中加入:

slowlog = log/www.default.com.slow

request_slowlog_timeout = 1

php_admin_value[open_basedir]=/data/release/www.domain.com/:/tmp/

其中,open_basedir可以写多个目录,多个目录间使用:分隔

时间: 2024-10-29 01:06:55

第 四 十 三 天:nginx 的 相 关 问 题的相关文章

第 四 十 三 天:mysql 的 相 关 问 题

小Q:梦想着诗一般的日子,时而简单,时而精致:处在歌一般的生活,时而 靠谱,时而不着调. ====================================================================== mysql在指定IP上启动端口----------------------------------------- 只需在my.cnf中的[mysqld]字段中加入一行 bind-addr  = 1.1.1.1 同一台MySQL服务器启动多个端口------------

第 四 十 三 天:Apache 的 相 关 问 题

小Q:人生的意志和劳动将创造奇迹般的奇迹.       -- 涅克拉索夫 apache设置自定义header----------------------------------------- 1. 在设置自定义header前,需要先检测一下你的httpd是否加载了mod_headers /usr/local/apache2/bin/apachectl  -l 否则需要重新编译一下了 2.  在httpd.conf 中加入 <IFModule mod_headers.c> Header add

第 四 十 二 天:FTP 的 相 关 问 题

小Q:让人迷茫的原因只有一个,那就是在本该拼搏的年龄,想得太多,做得太少. vsftpd配置完匿名账号却让输入用户名密码------------------------- 一开始不可写,后来配置了可写,并修改了/var/ftp/ 目录属性所属主与组都是ftp,因为毕竟匿名用户也是用ftp账号登录的.其实这样是不对的,系统默认/var/ftp 目录所属主与组是root,如果修改成ftp就会出问题,就会弹出窗口让登录. 解决:chown root:root /var/ftp chmod 755 /v

第 四 十 二 天:samba 的 相 关 问 题

小Q:世界上一成不变的东西,只有"任何事物都是在不断变化的"这条真理.--斯里兰卡 samba端口-------------------------------------------------------------- 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 (TCP) - 文件和打印共享 : smbd (基于SMB(Server Message Block

第 四 十 二 天:Tomcat 的 相 关 问 题

配置tomcat容器的access.log日志------------------------------ 编译server.xml文件,在 <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false&q

四十九、Nginx防盗链、Nginx访问控制、Nginx解析PHP相关配置、Nginx代理

一.Nginx防盗链 必须和"不记录日志和过期时间"结合在一起,因为它们同时用到了location. # vim /usr/local/nginx/conf/vhost/test.com.conf location ~* ^.+\.(gif|jpg|png|bmp|swf|jpeg|flv|rar|zip|doc|pdf|gz|bz2|xls)$ { expires 7d;    过期时间 valid_referers none blocked server_names *.test.

四十八、Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间

一.Nginx访问日志 日志格式 # pwd /usr/local/nginx/conf [[email protected] conf]# vim nginx.conf log_format ELA '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$http_user_agent"'; 解析

第四十天 一乐在其中—Android的小游戏打飞机(三)添加敌机

8月9日,晴."江城如画里,山晓望晴空.雨水夹明镜,双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机加载子弹和音效及背景音乐,本篇主要添加敌机. 本篇要用到的几个函数讲解: 1.voidsetTag (int nTag) 设置动作的标记. 2.CCRANDOM_0_1()函数生成的是 [0, 1] 之间的随机数:要生成  [0-100] 之间的数CCRANDOM_0_1 * 100:生成 [1,5]  之间的float 数,就是 CCRANDOM_0_1 * 4 + 1. 3.

《剑指Offer》题三十一~题四十

三十一.栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的数字均不相等.例如,序列{1, 2, 3, 4 ,5}是某栈的压栈序列,序列{4, 5, 3, 2, 1}是该压栈序列对应的一个弹出序列,但{4, 3, 5, 1, 2}就不可能是该压栈序列的弹出序列. 分析:本题中的压栈序列并非是一次全部压入堆栈!如果没有思路,可以举一两个例子,一步步分析压栈.弹出的过程,从中找出规律. 三十二.从上到下打印二叉树 题目一:不分行从