nginx常用配置

1. 配置第二个虚拟主机

可以在nginx.conf 加一行

include  conf/vhosts/*.conf;

这样,我们就可以在 conf/vhosts目录下创建虚拟主机配置文件了。

[[email protected] conf]# pwd
/usr/local/nginx/conf
[[email protected] conf]# mkdir vhosts

[[email protected] conf]# cd vhosts/
[[email protected] vhosts]# touch default.conf

[[email protected] vhosts]# cat default.conf 
server
 
{
     listen 80 default;
     server_name localhost;
     index index.html index.htm index.php;
     root /usr/local/nginx/html/;
 
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
     }
}

[[email protected] vhosts]# cat discaz.conf 
server
 
{
     listen 80;
     server_name www.123.com www.aaa.com www.bbb.com;
     index index.html index.htm index.php;
     root /data/www;
 
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
     }
}

2.用户认证

首先需要安装apache,可以使用yum install httpd 安装

生成密码文件,创建用户

[[email protected] log]# /usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/.htpasswd aming // 添加aming用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数

在nginx的配置文件中添加

location  / {

root /data/www/uc_server;

auth_basic              "Auth";

auth_basic_user_file   /usr/local/nginx/conf/.htpasswd;

}

3.域名重定向

if ($host != ‘www.123.com‘ ) {

rewrite  ^/(.*)$  http://www.123.com/$1  permanent;

}

[[email protected] ~]# curl -x127.0.0.1:80 www.aaa.com -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.2
Date: Sun, 17 May 2015 18:59:07 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://www.123.com/

[[email protected] ~]# curl -x127.0.0.1:80 www.123.com -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.2
Date: Sun, 17 May 2015 18:59:19 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.37
location: forum.php

4.日志相关

日志切割:

编写脚本:

vim  /usr/local/sbin/logrotate.sh  //加入

#! /bin/bash

d=`date -d "-1 day" +%Y%m%d`

/bin/mv /home/logs/discuz.log /home/logs/discuz_$d.log

/etc/init.d/nginx reload >/dev/null 2>/dev/null

[[email protected] vhosts]# vi /usr/local/nginx/conf/vhosts/discaz.conf   //在虚拟机配置文件内添加一下内容

access_log /home/logs/discuz.log combined_realip;

[[email protected] vhosts]# cat /home/logs/discuz_20150517.log
127.0.0.1 - [18/May/2015:03:27:09 +0800]www.123.com "/uc_server/" 302"-" "curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

日志格式

[[email protected] conf]# vi /usr/local/nginx/conf/nginx.conf   //在此文件内更改日志的格式

log_format main ‘$remote_addr - $remote_user [$time_local] $request ‘

‘"$status" $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent" "$http_x_forwarded_for"‘;

log_format main1 ‘$proxy_add_x_forwarded_for - $remote_user [$time_local] ‘

‘"$request" $status $body_bytes_sent ‘

‘"$http_referer" "$http_user_agent"‘;  //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。

错误日志error_log日志级别

error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:

error_log  /your/path/error.log crit;

crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。

5.静态文件不记录日志,配置缓存

[[email protected] vhosts]# vi discaz.conf

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires      30d;

access_log off;

}

location ~ .*\.(js|css)?$

{

expires      12h;

access_log off;

}

[[email protected] ~]# curl -x127.0.0.1:80 ‘http://www.123.com/static/image/common/logo.png‘ -I
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Sun, 17 May 2015 19:48:54 GMT
Content-Type: image/png
Content-Length: 4425
Last-Modified: Fri, 26 Dec 2014 01:49:42 GMT
Connection: keep-alive
ETag: "549cbeb6-1149"
Expires: Tue, 16 Jun 2015 19:48:54 GMT
Cache-Control: max-age=
Accept-Ranges: bytes2592000

6.防盗链

在 nginx.conf中的server部分中添加如下代码

[[email protected] vhosts]# vi discaz.conf

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {

valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com *.123.com *.aaa.com *.bbb.com ;  // 对这些域名的网站不进行盗链。

if ($invalid_referer) {

return 403;

rewrite ^/ http://www.example.com/nophoto.gif;

}

}

说明:如果前面配置中已经加了

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires      30d;

access_log off;

}

那么会和这一部分重复,这时候上面的生效,所以,我们需要把两者合在一起。如下:

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

{

expires 30d;

valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com *.123.com *.aaa.com *.bbb.com;  // 对这些域名的网站不进行盗链。

if ($invalid_referer) {

return 403;

rewrite ^/ http://www.example.com/nophoto.gif;

}

access_log off;

}

[[email protected] vhosts]# curl -x127.0.0.1:80 -e "http://dawe.com/sfawe" ‘http://www.123.com/static/image/common/logo.png‘ -I

HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Sun, 17 May 2015 20:02:37 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

7.访问控制

限制只让某个ip访问

deny          127.0.0.1;

allow           all;

[[email protected] ~]# curl -x127.0.0.1:80  www.123.com -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Mon, 18 May 2015 18:57:30 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

[[email protected] ~]# vi /usr/local/nginx/conf/vhosts/discaz.conf  //限制某个目录的访问
    location  /uc_server/ {
        allow 192.168.1.119;
        deny  all;

location ~ \.php$ {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
             }
     }

[[email protected] uc_server]# curl -x127.0.0.1:80  www.123.com/uc_server/ -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Mon, 18 May 2015 19:26:23 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

有时候会根据目录来限制php解析:

location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*\.php$

{

deny all;

}

[[email protected] uc_server]# curl -x127.0.0.1:80  www.123.com/sfweagf/image/ssfas.php -I

HTTP/1.1 403 Forbidden

Server: nginx/1.6.2

Date: Mon, 18 May 2015 19:43:59 GMT

Content-Type: text/html

Content-Length: 168

Connection: keep-alive

在实验中我发现在虚拟主机配置文件中若将php解析文件的配置放在限制前会报错为404,可见今后在配置时需要多注意逻辑顺序

[[email protected] uc_server]# curl -x127.0.0.1:80  www.123.com/sfweagf/image/ssfas.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.6.2
Date: Mon, 18 May 2015 19:42:43 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.37

使用 user_agent 控制客户端访问

location /

{

if ($http_user_agent ~ ‘bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315‘){

return 403;

}

}

8.伪静态

rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;

rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;

rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;

rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;

rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;

rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;

9.nginx 代理

server {
listen 80;
server_name aaa.com;

location / {
proxy_pass http://2.2.2.2/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# access_log /home/logs/aaa_access.log combined;
}

如果后端的机器有多台

upstream bbb
{
server 1.2.3.1:80;
server 1.2.3.4:80;
}

server {
listen 80;
server_name bbb.com;

location / {
proxy_pass http://bbb/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# access_log /home/logs/bb_access.log combined;
}

扩展学习:

根据访问的目录来区分后端的web http://www.lishiming.net/thread-920-1-1.html
针对请求的uri来代理 http://www.lishiming.net/thread-1049-1-1.html

时间: 2025-01-06 18:21:52

nginx常用配置的相关文章

Nginx常用配置实例(4)

Nginx作为一个HTTP服务器,在功能实现方面和性能方面都表现得非常卓越,完全可以与Apache相媲美,几乎可以实现Apache的所有功能,下面就介绍一些Nginx常用的配置实例,具体包含虚拟主机配置.负载均衡配置.防盗链配置以及日志管理等. 一. 虚拟主机配置实例 下面在Nginx中创建三个虚拟主机,需要说明的是,这里仅仅列出了虚拟主机配置部分. http { server { listen          80; server_name     www.domain1.com; acce

Nginx常用配置及优化安全

一个站点配置多个域名 server { listen 80; server_name demo.ct99.cn demo1.ct99.cn; } server_name 后跟多个域名即可,多个域名之间用空格分隔 一个服务配置多个站点 server { listen 80; server_name demo.ct99.cn; location / { root /home/project/pa; index index.html; } } server { listen 80; server_na

nginx常用配置系列-虚拟主机

本来准备详尽的出一份nginx配置讲解,但nginx功能配置繁多,平常使用中使用最多的一般有: 1. 虚拟主机配置 2. HTTPS配置 3. 静态资源处理 4. 反向代理 ================= 虚拟主机配置 ================= 先说虚拟主机配置,nginx的核心配置文件在nginx的安装目录下conf目录中(如果是CentOS通过yum安装则在/etc/nginx目录中) 在conf目录下创建vhost目录,方便管理虚拟主机的配置文件 mkdir vhost 以e

nginx常用配置系列-反向代理

接上篇,反向代理的原理与用途很多地方有讲,用文字说再多可能也表达不清楚,下面贴一张拓扑图,介绍下什么叫反向代理 以上图有两种情景 1. 访问者的客户端是 local ,要访问baidu的服务器,baidu的前台服务器本身不处理具体的业务,只是根据访问的数据类型,或者业务类型等(就是一些特定的规则,比如URL正则),将不同类的请求转发到不同的后端服务器,例如server1是静态资源的,server2是处理账户系统的等 2. 后端的每个server提供的服务完全相同,baidu的前台服务器根据后端每

nginx常用配置3

## 六.浏览器本地缓存配置 语法:expires 60 s|m|h|d ```动静分离效果: server { listen 80; server_name localhost; location / { root html; index index.html; } location ~ \.(png|jpg|js|css|gif)$ { root html/images; expires 5m; }}``` ## 七.Gzip压缩策略 浏览器请求 -> 告诉服务端当前浏览器可以支持压缩类型-

nginx常用配置系列-静态资源处理

接上篇,nginx处理静态资源的能力很强,后端服务器其实也可以处理静态资源,比如tomcat,但把非业务类的单一数据交给后端处理显然效率比较低,还有一种场景是多个站点公用一套资源集时,通过nginx可以建立静态资源服务器,达到高效处理静态资源,下面直接看nginx如何处理静态资源: server { listen 80; server_name example.com; index index.html index.htm index.php index.do; #站点根目录 root /hom

Apache、tomcat、Nginx常用配置合集

配置文件地址: Apache: /etc/httpd/conf/httpd.conf tomcat: /usr/local/tomcat/conf/server.xml Nginx  : /usr/local/nginx/conf/nginx.conf 开机启动文件:/etc/rc.d/rc.local 启动方式: Apache: service httpd start 启动 service httpd restart 重新启动 service httpd stop 停止服务 tomcat: 启

Nginx常用配置指令说明

注意:局部作用域的配置指令可覆盖全局作用域的配置指令 1.不在http响应头中显示Nginx的版本 # 可用于http{}配置块和server{}配置块server_tokens off; 2.索引文件 # 可用于http{}配置块和server{}配置块index index.html index.php; 3.是否允许目录浏览 # 可用于http{}配置块和server{}配置块autoindex on; 4.设置网站根目录 # 可用于http{}配置块和server{}配置块root "E

Nginx 常用配置模板

user root root; worker_processes auto; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; multi_accept on; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buf