FreeBSD下单网卡双ip的配置

用ifconfig -a查看现有IP配置
用下面命令可以设置IP别名:
ifconfig lnc0 alias 192.168.1.55 netmask 255.255.255.0

ifconfig lnc0 alias 192.168.1.55/24

lnc0----网卡接口
192.168.1.55 ----增加的IP

重启网卡:#/etc/netstart

增加IP:
ifconfig em0 add xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx
(主ip的子网掩码按实际填写,之后在主ip上增加的其他ip的主机子网掩码都填写255.255.255.255)

删除ip:
ifconfig em0 -alias xxx.xxx.xxx.xxx

以上设置只是临时增删ip,如果服务器重启后则又会恢复,如果想在服务器重启后也生效,就需要在/etc/rc.conf上进行设置,格式如下:
ifconfig_em0="inet xxx.xxx.xxx.xxx netmask 255.255.248.0" (主ip)
ifconfig_em0_alias0="inet xxx.xxx.xxx.xxx netmask 255.255.255.255"

上面em和alias后面的字母是数字0,不是字母o.

mysql中显示当前使用的数据库名称

mysql> select database();
+------------+
| database() |
+------------+
| csdn       |
+------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM information_schema.SCHEMATA where schema_name='csdn';
+--------------+-------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+-------------+----------------------------+------------------------+----------+
| NULL         | csdn        | latin1                     | latin1_swedish_ci      | NULL     |
+--------------+-------------+----------------------------+------------------------+----------+
1 row in set (0.00 sec)

mysql>

nginx使用不同的用户来跑fastcgi

今天在freebsd下用ports方式安装nginx+php+mysql环境, nginx使用www用户来跑的, 然后使用lighttpd中附带的spawn-fcgi来启动php-cgi, 我依然是用www用户来跑的fastcgi, 但是服务器上有多个用户, 我不想让他们使用一个用户来跑, 从安全上的考虑, 我可不想别人跨目录搞自己的站, 现在的phpshell都这么NB.
后来经朋友指点发现可以启动不同的fastcgi进程来解决这个问题, 一个用户只启动自己的进程,用自己的端口, 后来想了一下, 真的非常简单, 在使用spawn-fcgi启动的时候指定不同的端口指定不同的用户多简单啊, 唯一不爽的就是要多几个配置文件, 至少得一个用户一个吧

nginx的虚拟主机配置文件里有加载php的地方, 类似如下的
location ~ .*\.php?$
{
include php5.conf;
}
这个时候你就可以指定不同的配置文件了, 例如在虚拟主机hao32.com.conf里, 你可以使用hao32这个用户来跑一系列php-cgi进程:
location ~ .*\.php?$
{
include php5_hao32.conf;
}
那么这个php5_hao32.conf文件里必须有:
fastcgi_pass  127.0.0.1:8809; (其中8809是hao32用户独立占用的端口, 可以自定义)

在启动nginx之前可以先使用spawn-fcgi以hao32用户和8099端口来启动一系列php-cgi进程, 以此类推, 可以启动多组不同用户的和不同端口的php-cgi进程,这样安全很多了。

来源:http://www.hao32.com/unix-linux/36.html

关于Nginx Fastcgi的目录安全问题

没有在Nginx的配置中找到Apache中针对每个虚拟主机设置open_basedir的设置,目前只有禁止在某些特定目录下的php解析。
引用官方配置:
Too many example configs fail to secure the "uploads" directory of the application. Remember that if someone can upload a file named xyz.php and the uploads dir is publically accessible then you have given the attacker an easy way to insert PHP onto your site…

So if your app has an upload dir "/images/" then adjust your fastcgi call along the lines of:
http {
index index.php;
root  /var/www/htdocs;
# .php
location ~ .*\.php$ {
include /etc/nginx/fcgi.conf;
if ( $uri !~ "^/images/") {
fastcgi_pass  127.0.0.1:10004;
}
fastcgi_index index.php;
}
}
文件夹路径支持正则表达式。如$uri !~ "/*images*/"表示所有含有images字串的文件夹。找到更好的方法再贴出来。

Nginx虚拟主机防Webshell完美版(图)

作者:Rainy fox   来源:http://www.key0.cn/

我们先来看下nginx.conf

server
{
listen       80;
server_name  www.a.com;
index index.html index.htm index.php;
root  /data/htdocs/www.a.com/;

#limit_conn   crawler  20;

location ~ .*\.(php|php5)?
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

}

server
{
listen       80;
server_name  www.b.com;
index index.html index.htm index.php;
root  /data/htdocs/www.b.com/;

#limit_conn   crawler  20;

location ~ .*\.(php|php5)?
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

}

nginx在80端口接受到访问请求后,会把请求转发给9000端口的php-cgi进行处理

而如果修改php.ini中open_basedir= ../../../../../ ,针对两个不同的网站,www.a.com , www.b.com都会把请求发送给9000处理,而如果先访问www.a.com那么../../../../../就会变成A网站的根目录地址,然后 这时候如果你访问www.b.com,那么open_basedir仍然是A网站的根目录,但是对于B来说,又是不允许访问的,所以就造成了,第二个站点 打开以后会出现no input files,那么有什么解决办法呢?

我们可以把不同的虚拟主机发送到不同的php-cgi端口进行处理,当然响应的php-fpm配置文件中的open_basedir也不同。。我们来看看怎么配置。。

首先,nginx.conf配置如下

server
{
listen       80;
server_name  www.a.com;
index index.html index.htm index.php;
root  /data/htdocs/www.a.com/;

#limit_conn   crawler  20;

location ~ .*\.(php|php5)?
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

}

server
{
listen       80;
server_name  www.b.com;
index index.html index.htm index.php;
root  /data/htdocs/www.b.com/;

#limit_conn   crawler  20;

location ~ .*\.(php|php5)?
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9001;
fastcgi_index index.php;
include fcgi.conf;
}

}

注意:www.a.com 的请求发送到9000端口 , www.b.com的请求发送到9001端口,依次类推

nginx配置修改了,相对的,php-fpm.conf也要修改

每个站点建一个conf

A站点

#cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.a.com.conf

#vi /usr/local/webserver/php/etc/www.a.com.conf

找到php_defines,添加

<value name="open_basedir">/data/htdocs/www.a.com:/tmp:/var/tmp</value>

B站点

#cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.b.com.conf

#vi /usr/local/webserver/php/etc/www.b.com.conf

找到php_defines,添加

<value name="open_basedir">/data/htdocs/www.b.com:/tmp:/var/tmp</value>

找到listen_address,修改为

<value name="listen_address">127.0.0.1:9001</value>   注意这里的端口号

最后要修改php-fpm启动脚本

#vi /usr/local/webserver/php/sbin/php-fpm

注释掉原来的 #php_fpm_BIN --fpm php_opts,田间

php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.a.com.conf

php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.b.com.conf

启动服务

#/usr/local/webserver/php/sbin/php-fpm restart

查看端口

#netstat -tln

开了9000 9001分别处理两个站点请求

两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题

当然,启动之前记得conf里面的max_children,开启php-cgi子进程数,相应要减少一些,以免造成内存不足

nginx下UCH和DZ的rewrite规则

这个是bbs的

    server
    {
    listen 80;
    server_name bbs.aiyobaby.com;
    index index.html index.htm index.php;
    root /home/aiyobaby/web/bbs;

    #limit_conn crawler 20;

    location ~ .*\.(php|php5)?$
    {
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fcgi.conf;
    }

    location / {
    rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
    rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
    rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
    rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;
    rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
    break;
    }

复制代码

这个是home的

    server
    {
    listen 80;
    server_name home.aiyobaby.com;
    index index.html index.htm index.php;
    root /home/aiyobaby/web/home;

    #limit_conn crawler 20;

    location ~ .*\.(php|php5)?$
    {
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fcgi.conf;
    }

    #UCHome Rewrite Rule
    rewrite (space|network)\-(.+)\.html$ /$1.php?rewrite=$2 last;
    rewrite (space|network)\.html$ /$1.php last;
    rewrite ([0-9]+)$ /space.php?uid=$1 last;
    break;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    }

复制代码

=======================================
目前测试没有任何问题,可以访问 www.aiyobaby.com 哎哟宝贝亲子网,

关于nginx图片防止盗链
可以参考我的
http://www.discuz.net/viewthread ... amp;highlight=nginx

nginx下真正的图片防治盗链。

Nginx安装,配置,检测等相关

以下信息只能做为参考,可能与freebsd平台有点不符!


1.4.1 nginx安装

Nginx只是web服务器,配合php技术实现的fastcgi来提高性能。
1、安装rewrite模块支持包pcre库:
# tar zxvf pcre-7.8.tar.gz
# cd pcre-7.8/
# ./configure
# make && make install
cd ../

2、安装Nginx
说明:创建www用户组及www用户,如果之前php-fpm没有创建,这里要创建。
# /usr/sbin/groupadd www
# /usr/sbin/useradd -g www www

# tar zxvf nginx-0.7.59.tar.gz
# cd nginx-0.7.59/
#./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"

# make && make install
# cd ../

3.Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。
Nginx 的参数包括有如下几个:
-c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。
-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
-v:显示 nginx 版本号。
-V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。
例如我们要测试某个配置文件是否书写正确,我们可以使用以下命令
sbin/nginx -t -c conf/nginx.conf

1.4.2 nginx配置
1.在/usr/local/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
=======================================
nginx.conf才是nginx web服务器的配置文件
=======================================
user  www www;        /*启动nginx服务的用户与组*/
worker_processes 8;   /*启动nginx服务的工作进程*/
error_log  logs/nginx_error.log  crit; /*错误日志,以及等级*/
pid        /usr/local/nginx/nginx.pid;  /*nginx服务进程PID*/

worker_rlimit_nofile 51200;

events
{
use epoll;                /*工作模式*/
worker_connections 51200; /*每进程允许最大的同时连接数*/
}

http
{
include       mime.types;
default_type  application/octet-stream;

#charset  gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

sendfile on;
tcp_nopush     on;
keepalive_timeout 60;
tcp_nodelay on;

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 on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone  crawler  $binary_remote_addr  10m;

server
{
listen       80;               /*监听端口*/
server_name  localhost;        /*服务器名称*/
index index.html index.htm index.php;  /*缺省主页名称*/
root  /usr/local/nginx/html;   /*网站根目录,也可以采用下面内容*/
#也可以采用相对路径,下面注释部分*/
#location / {
#         root   html;
#         index  index.html index.htm;
# }

#limit_conn   crawler  20;

#通过FastCGI方式支持PHP,php页面由fastcgi代理处理,这也是反向代理的一个应用,这里可以是jsp/asp等脚本。
location ~ .*\.(php|php5)?$
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;   /*fastcgi监听端口*/
fastcgi_index index.php;
include fcgi.conf;       /*fastcgi配置文件,修改为以下内容*/
}

#对于某一类型的文件,设置过期时间,静态的页面通常设置长一点。
#静态文件,nginx自己处理
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires      30d;
}

#日志的格式
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  logs/access.log  access;
}
}
说明:以上配置文件只是基本配置文件,要实现其它功能的话,需要在此基础上进行修改。

2.在/usr/local/nginx/conf/目录中创建fcgi.conf文件:
说明:可以直接粘贴以下内容。
vi /usr/local/nginx/conf/fcgi.conf
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

1.4.3 nginx启动与管理
1.启动nginx

/usr/local/nginx/sbin/nginx

2.测试nginx配置文件
修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
# /usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

3.查看Nginx主进程号
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
或者无需这么麻烦,找到Nginx的Pid文件:
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

4.配置开机自动启动Nginx + PHP
vi /etc/rc.local
加入以下内容:
ulimit -SHn 51200
/usr/local/php/sbin/php-fpm start
/usr/local/nginx/sbin/nginx

5.测试nginx
应事先准备
vi /usr/local/nginx/html/test.php
<?
phpinfo();
?>
(1)http://192.168.129.21
(2)http://192.168.129.21/test.php

1.4.4 nginx配置总结
nginx对我来说是一个新的内容,安装的包比较多,在经过了一段时间 对nginx的了解之后,才真正的配置成功,本文只是实现了一个最基本的功能,对于nginx高性能的使用在配置文件中没有实现。在以后的学习过程中还需 要更深入的去了解,比如:反向代理,以及nginx+fastcgi分步式的环境配置。

1.5 Nginx基本配置管理
1.5.1 nginx配置基础
1、正则表达式匹配

~  区分大小写匹配
~* 不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
^  以什么开头的匹配
$  以什么结尾的匹配
\  转义字符。可以转. * ?等
*  代表任意字符

2、文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
例:
location = /
#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
location ^~ /images/ {
# 匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求

3、一些可用的全局变量
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri

1.5.2 nginx切割日志
1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh,输入以下内容:

#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

2、设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
输入以下内容:
00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh

1.5.3 nginx状态监控
在nginx.conf根目录下加入以下内容,过程如下:
1.修改配置文件
vi /usr/local/nginx/conf/nginx.conf
#以下面加入以下内容
location /NginxStatus {
stub_status             on;
access_log              on;
auth_basic              "NginxStatus";
}

2.重启nginx服务
(1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
(2)如果不行的话,先杀,再启动

3.测试
http://192.168.129.21/NginxStatus
Active connections: 1
server accepts handled requests
#nginx 总共处理了3个连接, 成功创建3 次握手, 总共处理了14个请求
3 3 14
Reading: 0 Writing: 1 Waiting: 0

1.5.4 nginx目录浏览
在nginx.conf根目录下加入以下内容,过程如下:
1.修改配置文件
vi /usr/local/nginx/conf/nginx.conf
#以下面加入以下内容
#里面有要这一句就可以了,其它可以注释
#注:与 { 要有空格,否则会出错
location / {
autoindex on;
}

2.重启nginx服务
(1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
(2)如果不行的话,先杀,再启动

3.测试
http://192.168.129.21

1.5.5 nginx禁止访问某类文件
在nginx.conf根目录下加入以下内容,过程如下:
修改配置文件如下
vi /usr/local/nginx/conf/nginx.conf
#以下面加入以下内容
#里面有要这一句就可以了,其它可以注释
#注:与 { 要有空格,否则会出错
方法一:
location ~* \.(txt|doc)$ {
if (-f $request_filename) {
root /usr/local/nginx/html/test;
break;
}
}
方法二
location ~* \.(txt|doc)$ {
root /usr/local/nginx/html/test;
deny all;
}
说明:用正则表达式进行匹配,来执行相应的处理。

1.5.6 nginx静态文件处理
第一种方法:根据文件类型expires
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
root /usr/local/nginx/html/;
expires 1d;
}
break;
}
第二种方法:根据判断某个目录
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /usr/local/nginx/html/;
expires 30d;
}

nginx/windows: nginx多虚拟主机配置

1.nginx.conf内容如下:

worker_processes 1;

error_log  /host/nginx/logs/error.log  crit;

pid        /host/nginx/logs/nginx.pid;

events {
worker_connections  64;
}

http {
include       /host/nginx/conf/mime.types;
default_type  application/octet-stream;

#charset  gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

keepalive_timeout 60;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
client_body_temp_path /host/nginx/client_body_temp;
proxy_temp_path /host/nginx/proxy_temp;
fastcgi_temp_path /host/nginx/fastcgi_temp;

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

client_header_timeout  3m;
client_body_timeout    3m;
send_timeout          3m;
sendfile                on;
tcp_nopush              on;
tcp_nodelay            on;
#设定虚拟主机
include       /host/nginx/conf/vhost/www_test_com.conf;
include       /host/nginx/conf/vhost/www_test1_com.conf;
include       /host/nginx/conf/vhost/www_test2_com.conf;
}

2.在conf目录下建立个vhost目录,在vhost目录下分别建立www_test_com.conf,www_test1_com.conf,www_test2_com.conf 3个文件

www_test_com.conf代码如下:

server {
listen 202.***.***.***:80;            #换成你的IP地址
client_max_body_size 100M;
server_name  www.test.com#换成你的域名
charset gb2312;
index index.html index.htm index.php;
root   /host/wwwroot/test;         #你的站点路径

#打开目录浏览,这样当没有找到index文件,就也已浏览目录中的文件
autoindex on;

if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

error_page  404              /404.html;
location = /40x.html {
root  /host/wwwroot/test;       #你的站点路径
charset   on;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /host/wwwroot/test;      #你的站点路径
charset   on;
}

#将客户端的请求转交给fastcgi
location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass   127.0.0.1:9000;
include /host/nginx/conf/fastcgi_params;
}

#网站的图片较多,更改较少,将它们在浏览器本地缓存15天
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires      15d;
}

#网站会加载很多JS、CSS,将它们在浏览器本地缓存1天
location ~ .*\.(js|css)?$
{
expires      1d;
}

location /(WEB-INF)/ {
deny all;
}

#设定日志格式
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  /host/nginx/logs/down/access.log  access;   #日志的路径,每个虚拟机一个,不能相同
server_name_in_redirect  off;
}

3.www_test1_com.conf和www_test2_com.conf,文件和上面的基本相同,只要把红色提示的地方修改一下就可以了,具体的日志内容如下:

www_test1_com.conf如下:
..........

#设定日志格式
log_format  test1 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#设定本虚拟主机的访问日志
access_log  /host/nginx/logs/test1/test1.log  test1;   #日志的路径,每个虚拟机一个,不能相同
server_name_in_redirect  off;
}

www_test2_com.conf如下:
..........

#设定日志格式
log_format  test2 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#设定本虚拟主机的访问日志
access_log  /host/nginx/logs/test2/test2.log  test2;   #日志的路径,每个虚拟机一个,不能相同

如何查看FreeBSD的系统日志

由于FreeBSD是一个多用 户系统,那么就需要管理员进行日常维护,特别是用做网络服务器的系统,一旦因为缺乏维护而造成停机故障,就会造成很大损失。即使对于单用户的 FreeBSD系统,同样也要执行这些不可缺乏的维护任务,只是由于系统归个人使用,那么对维护的要求就不必那么高,维护任务就轻松一些。

系统日志

系统的日志记录提供了对系统活动的详细审计,这些日志用于评估、审查系统的运行环境和各种操作。对于一般情况,日志记录包括记录用户登录时间、登录地点、进行什么操作等内容,如果使用得当,日志记录能向系统管理员提供有关危害安全的侵害或入侵试图等非常有用的信息。

BSD提供了详细的各种日志记录,以及有关日志的大量工具和实用程序。这些审计记录通常由程序自动产生,是缺省设置的一部分,能够帮助Unix管理员来寻找系统中存在的问题,对系统维护十分有用。还有另一些日志记录,需要管理员进行设置才能生效。

大部分日志记录文件被保存在/var/log目录中,在这个目录中除了保存系统生成日志之外,还包括一些应用软件的日志文件。当然/var目录下的其他子目录中也会记录下一些其他种类的日志记录文件,这依赖于具体的应用程序的设置。

$ ls /var/log

adduser maillog.5.gz sendmail.st.1

dmesg.today maillog.6.gz sendmail.st.10

dmesg.yesterday maillog.7.gz sendmail.st.2

httpd-access.log messages sendmail.st.3

httpd-error.log messages.0.gz sendmail.st.4

kerberos.log messages.1.gz sendmail.st.5

lastlog messages.2.gz sendmail.st.6

lpd-errs messages.3.gz sendmail.st.7

maillog messages.4.gz sendmail.st.8

maillog.0.gz messages.5.gz sendmail.st.9

maillog.1.gz news setuid.today

maillog.2.gz ppp.log setuid.yesterday

maillog.3.gz sendmail.st userlog

maillog.4.gz sendmail.st.0 wtmp

系统登录日志

系统会保存每个用户的登录记录,这些信息包括这个用户的名字、登录起始结束时间以及 从何处登录入系统的等等。它们被保存到/var/log/lastlog、/var/log/wtmp和/var/run/utmp文件中,这三个文件以 二进制格式保存了这些用户的登录数据。

其中/var/run/utmp文件中保存的是当前系统用户的登录记录,因此这个文件会随着用户进入和离开系统而不断变化,而它也不会为用户保留很长的记录,只保留当时联机的用户记录。系统中需要查询当前用户状态的程序,如 who、w等就需要访问这个文件。

utmp可能不包括所有精确的信息,某些突发错误会终止用户登录会话,当没有及时更新utmp记录,因此utmp的记录不是百分之百的可以信赖的。

而/var/log/wtmp保存了所有的登录、退出信息,以及系统的启动、停机记 录,因此随着系统正常运行时间的增加,它的大小也会越来越大,增加的速度依赖于系统用户登录次数。因此可以利用这个日志用来查看用户的登录记录,last 命令就通过访问这个文件来获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。ac命令同样也使 用wtmp中的数据产生报告,但它的显示方式不同。它可以根据用户(ac -p),或按日期(ap -d)显示信息,这样管理员就能获得一些非常有用的反常信息,如一个平时不太活跃的用户突然登录并连接很长时间,就有理由怀疑这个帐户被窃取了。

注意:X Window由于会同时打开多个终端窗口,因此会使得用户登录连接时间迅速增加。

lastlog文件保存的是每个用户的最后一次登录信息,包括登录时间和地点,这个文件一般只有login程序使用,通过用户的UID,来在lastlog文件中查找相应记录,然后报告其最后一次登录时间和终端tty。然后, login程序就使用新的记录更新这个文件。

这三个文件是使用二进制格式保存的,因此不能直接查看其中的内容,而需要使用相关命 令。当然也可以通过程序来访问这三个文件,这就需要了解它们使用的数据结构。其中utmp和wtmp使用同样的数据结构,而lastlog使用另外一个数 据结构,可使用man来进行查询具体结构。如果系统的用户数量很多,那么wtmp文件的大小会迅速增加,在系统/var文件系统空间紧张的情况下,就导致 这个文件系统被占满。系统不会主动控制这个文件的大小,因此这需要管理员的干预,需要手工及时清除,或编写shell脚本定期保存和清除。

系统还可以提供记账统计的功能,要打开系统的计账功能,需要使用accton命令,注意,accton必须跟随记账日志文件的名字作参数,而不带参数的accton将关闭记账进程。

当打开了记账功能后,可以使用lastcomm来检查在系统中执行的所有命令的信息,包括执行的命令、执行命令的用户、用户使用的终端tty,命令完成的时间,执行时间等。从lastcomm的输出也能帮助管理员检查可能的入侵行为。

此外可以使用ac命令来查询用户的连接时间的报告,sa命令来查询用户消耗的处理器时间的报告。

Syslog日志记录

最初,syslog只是为了sendmail而设计的消息日志工具,由于它提供了一 个中心控制点,使得sys log非常好用和易配置,因此当今很多程序都使用syslog来发送它们的记录信息。syslog是一种强大的日志记录方式,不但可以将日志保存在本地文 件中,还可以根据设置将syslog记录发送到网络上的另一台主机中。

支持syslog方式的系统启动了syslogd守护进程,这个程序从本地的 Unix套接字和监听在514端口(UDP)上的Internet套接字,来获得syslog的记录。本机中进程使用syslog系统调用发送来sy slog记录,然后由syslogd将他们保存到正确的文件或发送到网络上另一台运行syslogd主机中去。

syslogd的设置文件为/etc/syslog.conf,定义消息对应的相应目标,一条消息可以达到多个目标,也可能被忽略。

# $Id: syslog.conf,v 1.9 1998/10/14 21:59:55 nate Exp $

#

# Spaces are NOT valid field separators in this file.

# Consult the syslog.conf(5) manpage.

*.err;kern.debug;auth.notice;mail.crit /dev/console

*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages

mail.info /var/log/maillog

lpr.info /var/log/lpd-errs

cron.* /var/cron/log

*.err root

*.notice;news.err root

*.alert root

*.emerg *

!ppp

*.* /var/log/ppp.log

syslog.conf的配置可以分为两个部分,第一部分用于区分消息的类型,另一 个用于设置消息发送的目的地。通常,消息的类型包括消息的产生者,例如kern表示内核产生的消息,auth表示认证系统产生的消息,等等,还包括消息的 级别,例如emerg表示非常重要的紧急信息,alert表示系统告警状态,crit表示关键状态,err 表示一般的错误信息,warning表示警告信息,notice表示提示信息,但还不是错误,info表示一般信息,debug表示调试信息等,因此一个 消息的类型可能为:kern.debug、mail.info等,但页可以使用通配符*进行匹配。

从上面的syslog.conf的设置可以看出,系统正常运行中的很多重要的信息, 如错误信息*.err、内核调试信息kern.debuf、认证报告auth.notice等被直接输出的console中,另外还有一些比较重要的信息 被输出到/var/log/messages文件中,发送邮件的记录将被保存在/var/log/mail log文件中,打印记录为/var/log/lpd-errs等,使得管理员可以根据这些文件来查询相关记录,进行统计或寻找系统问题。其中使用 syslog记录的messages文件中包括root登录的信息、用户多次登录失败的尝试等对系统安全相当重要的信息,因此也是系统遭受攻击之后,攻击 者会根据syslog.conf中设置试图清除相关文件。

配置nginx启用SSI使服务器支持shtml格式页面

之所以要扯到ssi,是因为ssi是Server Side Include的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。

shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些 shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来。

而我们刚刚安装到的nginx服务器,默认情况下,是不支持ssi的,所以一些shtml格式的页面文件,也就不能正常的显示了!其实nginx 也有内置的SSI 模块 ngx_http_ssi_module,所以要想便其支持shtml格式的文件,只需要在配置文件里设置一下就OK了!

打开nginx 的配置文件nginx.conf,在里面的http里添加下面几行配置

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

这样就可以支持shtml了