NGINX的安装及配置

昨天系统的nginx出了点问题,nginx进程被kill,但是整个系统下又找不到nginx的目录。

由于nginx正在做分发跳转,所以很多系统都进不去了。没有办法,只能重新安装及配置

查找nginx的安装

sudo rpm -qa | grep nginx

发现机器上已经没有nginx的安装目录了,使用rpm安装

sudo yum -b test install nginx
安装目录为 /home/admin/nginx


启动脚本在 /home/admin/nginx/bin

配置文件在 /home/admin/nginx/conf

另一种的安装方式也可以使用编译安装,安装方法如下:

wget  http://nginx.org/download/nginx-1.2.6.tar.gz 
tar zxvf nginx-1.2.6.tar.gz
sudo ./configure --with-http_stub_status_module  --prefix=/opt/nginx 
make 
make install

更多的安装配置 
./configure --prefix=/usr/local/nginx 
--with-openssl=/usr/include (启用ssl) 
--with-pcre=/usr/include/pcre/ (启用正规表达式) 
--with-http_stub_status_module (安装可以查看nginx状态的程序) 
--with-http_memcached_module (启用memcache缓存) 
--with-http_rewrite_module (启用支持url重写)
这个时候安装的路径为 /usr/local/nginx


验证配置文件及重启的命令:

sudo /opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
sudo /opt/nginx/sbin/nginx -s reload

或者使用这个方法:

启动:nginx 
重启:kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 
测试配置文件:nginx -t
nginx的配置文件配置为:
#运行用户
ser  nobody nobody;
#启动进程
worker_processes  5;
#全局错误日志及PID文件
error_log  logs/error.log notice;
pid        logs/nginx.pid;
#工作模式及连接数上限
events {
#工作模式有:select(标准模式),poll(标准模式),kqueue(高效模式,适用FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 and MacOS X),
#epoll(高效模式,本例用的。适用Linux 2.6+,SuSE 8.2,),
#/dev/poll(高效模式,适用Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+)
use epoll;
worker_connections      1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型
include      conf/mime.types;
default_type  application/octet-stream;
#设定日志格式
log_format main        '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" '
                       '"$gzip_ratio"';

log_format download    '$remote_addr - $remote_user [$time_local] '                       '"$request" $status $bytes_sent '                       '"$http_referer" "$http_user_agent" '                       '"$http_range" "$sent_http_content_range"';
#设定请求缓冲
client_header_buffer_size    10k;
large_client_header_buffers  4 4k;

#开启gzip模块,要求安装gzip 在运行./config时要指定
gzip on;
gzip_min_length  1100;
gzip_buffers    4 8k;
gzip_types      text/plain;
output_buffers  1 32k;
postpone_output  1460;
#设定访问日志
access_log  logs/access.log  main;
client_header_timeout  3m;
client_body_timeout    3m;
send_timeout          3m;
sendfile                on;
tcp_nopush              on;
tcp_nodelay            on;
keepalive_timeout  65;

#设定负载均衡的服务器列表
upstream backserver {
#weigth参数表示权值,权值越高被分配到的几率越大
#本例是指在同一台服务器,多台服务器改变ip即可
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
 #Deny access to any host other than (www).4535.com
 server {
     server_name  _;  #default
     return 404;
 }
 
#设定虚拟主机,默认为监听80端口,改成其他端口会出现问题
server {
listen         80;
server_name    test.com www.test.com;
charset utf8;
#设定本虚拟主机的访问日志
access_log  logs/test.com.log  main;
#如果访问 /images/*, /js/*, /css/* 资源,则直接取本地文件,不用转发。但如果文件较多效果不是太好。
location ~ ^/(images|js|css)/  {
root    /usr/local/testweb;
expires 30m;
}
#对 "/" 启用负载均衡
location / {
proxy_pass      http://backserver;
proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout  90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size      4k;
proxy_buffers          4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;}
#设定查看Nginx状态的地址,在运行./config 要指定,默认是不安装的。
location /NginxStatus {
stub_status            on;
access_log             on;
auth_basic             "NginxStatus";
#是否要通过用户名和密码访问,测试时可以不加上。conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可#auth_basic_user_file  conf/htpasswd;
}
}

参考文档:http://www.blogjava.net/cenly60/archive/2008/12/12/245965.html

系统中的nginx主要用来做域名跳转的,这个时候我们就要用到nginx重定向域名了

什么是301重定向:


301重定向是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,等等。 301重定向可促进搜索引擎优化效果从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而收到丝毫影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。
什么是392重定向:


(302 redirect)指的是当浏览器要求一个网页的时候,主机所返回的状态码。302状态码的意义是暂时转向到另外一个网址。302 redirect: 302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。


参考文档http://www.seowhy.com/bbs/thread-2047-1-1.html

nginx做重定向的时候使用了rewrite

nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下:
rewrite 正则表达式 替换目标 flag标记
flag标记可以用以下几种格式:
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:
location /download/ {
rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.gz break;
}
nginx在server及location可使用if来做判断:
正则表达式-匹配判断
~  为区分大小写匹配; !~为区分大小写不匹配
~* 为不区分大小写匹配;!~为不区分大小写不匹配
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}

文件和目录判断
 -f和!-f判断是否存在文件
 -d和!-d判断是否存在目录
 -e和!-e判断是否存在文件或目录
 -x和!-x判断文件是否可执行
例如下面设定nginx在文件和目录不存在的时候重定向:
if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}
return

返回http代码,例如设置nginx防盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
  valid_referers none blocked www.jefflei.com www.leizhenfang.com;
  if ($invalid_referer) {
    return 404;
  }
}
set

设置nginx变量

这里有一个比较详细的参考文档:

http://www.cnblogs.com/benio/archive/2010/08/16/1800584.html


/**

* 20121224nginx如何配置跳转

*/

    server {
        listen              80;
        server_name         XXXXX;
        location / {
            root   html;
            proxy_pass http://XXXX:80;
            proxy_set_header       Host $host:$server_port;
            proxy_set_header       X-Real-IP $remote_addr;
            proxy_set_header       X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size  100m;
            proxy_connect_timeout       1;
            proxy_read_timeout          60;
            proxy_send_timeout          1;
        }
    
这样访问 XXXXX的时候就会跳转到XXXX:80 并且保证了url不变即还是XXXXX

下面把静态文件配置起来

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
           root   html;
        }
    }
其中静态文件放在root即html这个文件夹下,然后访问nginx的8080端口即可获得nginx下的静态文件




总结一下,nginx在现有的系统上使用有一年多了,目前主要还是用来做域名跳转,另外还有一个功能是加速静态文件。这个功能找个时间再整理一下.


你可能感兴趣的:(NGINX的安装及配置)