Linux基础 Nginx

Posted 上海老男孩教育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础 Nginx相关的知识,希望对你有一定的参考价值。

  ✦ ✦ ✦ ✦ ✦

【Linux基础】 Nginx

目录nginx一 基本配置二 虚拟主机三 访问控制四 查看状态五 LNMP六 Upstream七 rewrite八 Tomcat JSP九 Tomcat虚拟主机十一 其他


【Linux基础】 Nginx

                ✦ ✦ ✦ ✦ ✦

Nginx

一 基本配置



Nginx

1. 高性能的HTTP Server,支持高达20000并发访问
2. 反向代理服务器,给网站加速
3. 做为前端一个负载均衡器
=========================================

一、准备工作
# service httpd stop
# chkconfig httpd off
所需的软件: 开发库,openssl-devel

二、部署Nginx
1. pcre: 支持正则表达式,地址重写rewrite
# tar xvf pcre-8.10.tar.gz
# cd pcre-8.10
# ./configure && make && make install
# ldconfig

2. nginx
# useradd www
# tar xvf nginx-1.2.0.tar.gz
# cd nginx-1.2.0
[root@localhost nginx-1.2.0]# ./configure
> --user=www
> --group=www
> --prefix=/usr/local/nginx-1.2.0
> --with-http_stub_status_module
> --with-http_sub_module
> --with-http_ssl_module
> --with-pcre=pcre源程序目录
# make
# make install
# cd /usr/local/
# ln -s nginx-1.4.4/ nginx

# tree /usr/local/nginx/
/usr/local/nginx/
|-- conf
|   |-- fastcgi.conf
|   |-- fastcgi.conf.default
|   |-- fastcgi_params
|   |-- fastcgi_params.default
|   |-- koi-utf
|   |-- koi-win
|   |-- mime.types
|   |-- mime.types.default
|   |-- nginx.conf    //主配置文件
|   |-- nginx.conf.default
|   |-- scgi_params
|   |-- scgi_params.default
|   |-- uwsgi_params
|   |-- uwsgi_params.default
|   `-- win-utf
|-- html
|   |-- 50x.html
|   `-- index.html
|-- logs
`-- sbin
   `-- nginx

3. 启动
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# netstat -tnlp |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      10627/nginx    

4. 测试
# links -dump 192.168.2.115
        Welcome to nginx!
# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local   //开机运行


二、Nginx基本配置
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
CoreModule    Nginx内核模块
EventsModule   事件驱动模块
HttpCoreModule http 内核模块

# sed -i '/^[ ]*#/d;/^$/d' /usr/local/nginx/conf/nginx.conf

# vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;       //初始启动的进程数(建议CPU的core数)
worker_connections  15000;      //最大连接数
server {
       listen       80;        //监听的端口  
       server_name  localhost;    //站点名
       location / {
           root   html;       //root指令指定网站主目录(相对于nginx的安装目录)
           index  index.html index.htm; //默认主页
       }
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
}

语法检查:
# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加载nginx:
[root@localhost ~]# pgrep nginx
17411
17412
[root@localhost ~]# kill -HUP 17411
[root@localhost ~]# pgrep nginx
17411
17806
17807
17808
17809
17810
17811
17812
17813
17814
17815

# rm -rf /usr/local/nginx/html/*      //站点默认主目录
# echo "new nginx..." > /usr/local/nginx/html/index.html
# links -dump 192.168.2.115
  new nginx...


排错:
[root@abyssla ~]# /usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot
open shared object file: No such file or directory
=========================================

二 虚拟主机



Nginx 虚拟主机
=========================================
基于IP
基于主机名
基于端口

基于主机名 name-based
基于IP  ip-based

一、规划
网站       IP       网站主目录        
www.localhost.com  192.168.10.33  /nginx/localhost
www.126.com   192.168.10.33  /nginx/126
www.baidu.com   192.168.10.133  /nginx/baidu
由于使用了两个IP,在接口上绑定IP

二、DNS解析
www.localhost.com  localhost.com    ==> 192.168.10.33
www.126.com        126.com          ==> 192.168.10.33
www.baidu.com   baidu.com        ==> 192.168.10.133
ping ...

三、Nginx虚拟主机
1. 准备工作
[root@station230 ~]# mkdir -p /nginx/{126,localhost,baidu}
[root@station230 ~]# echo "nginx test: www.126.com" > /nginx/126/index.html
[root@station230 ~]# echo "nginx test: www.localhost.com" > /nginx/localhost/index.html
[root@station230 ~]# echo "nginx test: www.baidu.com" > /nginx/baidu/index.html

2.配置Nginx实现虚拟主机
[root@localhost ~]# vim /usr/local/nginx-1.2.0/conf/nginx.conf
http {
   include        mime.types;
   default_type  application/octet-stream;
   sendfile         on;
   keepalive_timeout  65;
   server {                
       listen       192.168.10.33:80;        
       server_name  www.localhost.com localhost.com;   基于主机名
       location / {              
           root   /nginx/localhost;          
           index  index.html index.htm;      
       }                  
   }                  

   server {                
       listen       192.168.10.33:80;        
       server_name  www.126.com 126.com;     基于主机名
       location / {              
           root   /nginx/126;          
           index  index.html index.htm;      
       }                  
   }                  

   server {                
       listen       192.168.10.133:80;        
       server_name  www.baidu.com baidu.com;    基于IP
       location / {              
           root   /nginx/baidu;          
           index  index.html index.htm;      
       }                  
   }                          
}

3. 启动
[root@localhost ~]# /usr/local/nginx-1.2.0/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.2.0/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.2.0/conf/nginx.conf test is successful
[root@localhost ~]# pgrep nginx
10627
10866
10867
[root@localhost ~]# kill -HUP 10627

4. 测试
[root@localhost ~]# links -dump 126.com
  nginx test: www.126.com
[root@localhost ~]#
[root@localhost ~]# links -dump localhost.com
  nginx test: www.localhost.com
[root@localhost ~]#
[root@localhost ~]# links -dump baidu.com
  nginx test: www.baidu.com

三 访问控制



Nginx访问控制
=========================================

基于用户
基于主机

基于用户的访问控制
1. 建立口令文件
[root@localhost ~]# htpasswd -cm /usr/local/nginx/passwd user10
[root@localhost ~]# htpasswd -m /usr/local/nginx/passwd user20
[root@localhost ~]# cat /usr/local/nginx/passwd
user10:$apr1$Cw6eF/..$MNBh6rvkvsfH9gDZ/kEhg/
user20:$apr1$tb6B8...$y28sfvudhfb4V8xPlvvi//

2. 实现认证
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
       listen       192.168.10.133:80;
       server_name  www.baidu.com baidu.com;
       location / {
           root   /nginx/baidu;
           index  index.html index.htm;
           auth_basic "nginx access test!";
           auth_basic_user_file /usr/local/nginx/passwd;
       }
   }

3. 访问测试
[root@localhost ~]# kill -1 `cat /usr/local/nginx/logs/nginx.pid`
[root@localhost ~]# links www.baidu.com


基于主机的访问控制
server {
       listen       192.168.10.133:80;
       server_name  www.baidu.com baidu.com;
       location / {
           root   /nginx/baidu;
           index  index.html index.htm;
  allow 192.168.10.240;
  deny all;
       }
   }

四 查看状态



查看Nginx的状态
=========================================

一、编译安装Nginx时
--with-http_stub_status_module

二、配置Nginx
# vim /usr/local/nginx/conf/nginx.conf
server {
       listen       80;
       server_name  localhost;
       #charset koi8-r;
       #access_log  logs/host.access.log  main;

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

       location /nginx_status {      
               stub_status on;        
               allow all;          
       }                
}

[root@localhost ~]# killall nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx


[root@localhost ~]# firefox http://192.168.2.253/nginx_status &
Active connections: 22    
server accepts handled requests
27 27 434      
Reading: 2 Writing: 1 Waiting: 19  

五 LNMP



LNMP
=========================================

方案一:  主机A Nginx(FastCGI)   +    主机B PHP(php-fpm)    +    主机C mysql
            静态页面.html              PHP动态程序      数据库  
                           
方案二:  主机A Nginx(FastCGI)  + PHP(php-fpm) + MySQL        


nginx-1.4.4.tar.gz
php-5.5.7.tar.gz
cmake-2.8.10.2.tar.gz
mysql-5.5.33.tar.gz
Discuz_X3.1_SC_UTF8.zip


一、安装Nginx
1. pcre: 支持正则表达式,地址重写rewrite
# tar xvf pcre-8.10.tar.gz
# cd pcre-8.10
# ./configure && make && make install

2. Nginx
# yum -y install openssl openssl-devel
# groupadd www
# useradd -g www www
# tar xf nginx-1.4.4.tar.gz
# cd nginx-1.4.4
# ./configure
> --prefix=/usr/local/nginx
> --user=www
> --group=www
> --with-http_ssl_module
> --with-http_flv_module
> --with-http_stub_status_module
> --with-http_gzip_static_module
> --with-pcre=pcre源程序目录
# make
# make install
# /usr/local/nginx/sbin/nginx  
# netstat -tnlp |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      11051/nginx
# elinks -dump http://localhost
                              Welcome to nginx!
# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local


二、安装PHP
1. 以php-fpm的方式安装php
# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
libxml2 libxml2-devel libcurl libcurl-devel libxslt-devel
#./configure
--prefix=/usr/local/php
--with-curl
--with-freetype-dir
--with-gd
--with-gettext
--with-iconv-dir
--with-jpeg-dir
--with-kerberos
--with-libdir=lib64
--with-libxml-dir
--with-mysql
--with-mysqli
--with-openssl
--with-pcre-regex
--with-pdo-mysql
--with-pdo-sqlite
--with-pear
--with-png-dir
--with-xmlrpc
--with-xsl
--with-zlib
--enable-fpm
--enable-bcmath
--enable-libxml
--enable-inline-optimization
--enable-gd-native-ttf
--enable-mbregex
--enable-mbstring
--enable-opcache
--enable-pcntl
--enable-shmop
--enable-soap
--enable-sockets
--enable-sysvsem
--enable-xml
--enable-zip
# make && make install  

2. php-fpm配置文件
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid

3. php主配置文件
# cp php.ini-production /usr/local/php/lib/php.ini

4. 添加到init启动
[root@test php-5.5.7]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@test php-5.5.7]# chmod a+x /etc/rc.d/init.d/php-fpm
[root@test php-5.5.7]# chkconfig --add php-fpm
[root@test php-5.5.7]# chkconfig php-fpm on
[root@test php-5.5.7]# service php-fpm start
Starting php-fpm  done


三、整合Nginx和PHP
1. Nginx启用Fastcgi
[root@test php-5.5.7]# vim /usr/local/nginx/conf/nginx.conf
启用:
location / {
           root   html;
           index  index.php index.html index.htm;
       }

去掉以下行的注释:
location ~ .php$ {
           root             html;
           fastcgi_pass    127.0.0.1:9000;
           fastcgi_index   index.php;
           fastcgi_param   SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include          fastcgi_params;
       }

2. fastcgi模块参数文件
[root@test ~]# rm -rf /usr/local/nginx/conf/fastcgi_params
[root@test ~]# vim /usr/local/nginx/conf/fastcgi_params
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;

3. 最终确认并重启
[root@localhost ~]# killall nginx; /usr/local/nginx/sbin/nginx
[root@localhost ~]# /etc/init.d/php-fpm restart
[root@localhost ~]# netstat -tnlp |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*  LISTEN      17947/nginx        
[root@localhost ~]# netstat -tnlp |grep :9000
tcp        0      0 127.0.0.1:9000              0.0.0.0:*  LISTEN      17961/php-fpm      


四、安装MySQL(略)
方案一:
[root@localhost nginx-1.2.0]# yum -y install mysql-server
[root@localhost nginx-1.2.0]# service mysqld start
[root@localhost nginx-1.2.0]# chkconfig mysqld on

方案二:
使用源码包编译安装(参考MySQL安装)


五、上传php动态网站测试
1. 测试php文件能否执行
[root@test ~]# cd /usr/local/nginx/html/
[root@test html]# rm -rf *
[root@test html]# vim index.php
<?php
phpinfo();
?>

2. 测试php连接MySQL是否正常
[root@test html]# vim index2.php
<?php
$link=mysql_connect('127.0.0.1','root','123');
if ($link)
             echo "Successfuly";
else
             echo "Faile";
mysql_close();
?>

3. 测试Discuz
=========================================

六 Upstream



Nginx Upstream实现负载均衡
========================================================

一、配置使用Nginx实现LB
[root@nginx ~]# sed  -i '/^[ ]*#/d; /^$/d' /usr/local/nginx/conf/nginx.conf
[root@nginx ~]# cat  /usr/local/nginx/conf/nginx.conf
     worker_processes  1;
 
     events {
         worker_connections  1024;
     }
   
     http {
     upstream localhost_lb {
     ip_hash;          //会话保持
           server 192.168.122.30:80;    //后端的真实服务器
           server 192.168.122.40:80;    //后端的真实服务器
     server 192.168.122.50:80;    //后端的真实服务器
    }
   
       server {
           listen       80;
           server_name  www.localhost.com;
   
           location / {
               root   html;
               index index.php index.html index.htm;
               proxy_pass http://localhost_lb;
   proxy_set_header Host $host;
           }

           error_page   500 502 503 504  /50x.html;
           location = /50x.html {
                 root   html;
             }
         }
     }

========================================================

七 rewrite

Nginx地址重写 rewrite

========================================================


一、什么是Rewrite
Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程。

1. URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如
http://www.123.com/news/index.php?id=123 使用URLRewrite 转换后可以显示为 http://www.
123.com/news/123.html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁
124. 明快。形如http://www.123.com/news/index.php?id=123的网页地址,自然是毫无美感可言,
125. 而用UrlRewrite技术,你可以轻松把它显示为 http://www.123.com/news/123.html。
理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所
以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。

2. 从安全角度上讲,如果在url中暴露太多的参数,无疑会造成一定量的信息泄漏,可能会被一些黑客
利用,对你的系统造成一定的破坏,所以静态化的url地址可以给我们带来更高的安全性。

3. 实现网站地址跳转。


二、Rewrite相关指令
Nginx Rewrite相关指令有if、rewrite、set、return等。

if 的语法 应用于server和location环境内

if (condition) { }

if 可以支持如下条件判断匹配符号
~     为区分大小写匹配
~*    为不区分大小写匹配
!~!~*  分别为区分大小写不匹配及不区分大小写不匹配
-f !-f   用来判断是否存在文件
-d !-d   用来判断是否存在目录
-e !-e   用来判断是否存在文件或目录
-x !-x   用来判断文件是否可执行

在匹配过程中可以引用一些Nginx的全局变量,更多的变量请参考
http://wiki.nginx.org/NginxHttpCoreModule Variables 部分
$args       请求中的参数;
$document_root    针对当前请求的根路径设置值;
$host       请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate      对连接速率的限制;
$request_method   请求的方法,比如"GET""POST";
$remote_addr    客户端地址;
$remote_port     客户端端口号;
$remote_user    客户端用户名,认证用;
$request_filename   当前请求的文件路径名(带root指定的路径)
$request_uri     当前请求的文件路径名(不带root指定的路径)
$query_string    $args相同;
$scheme      所用的协议,比如http或者是https
$server_protocol   请求的协议版本,"HTTP/1.0""HTTP/1.1";
$server_addr     服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用
以取得地址(造成资源浪费);
$server_name    请求到达的服务器名;
$document_uri     $uri一样,URI地址;
$server_port      请求到达的服务器端口号;


三、Rewrite匹配参考示例
例1 匹配访问的url地址是否是个目录
if (-d $request_filename) {
;
}

例2 匹配访问的地址是否以www开头
if ($hosts ~* ^www) {
;
}


四、Rewrite flag
rewrite 指令根据表达式来重定向URI,或者修改字符串。可以应用于server,location, if环境下
每行rewrite指令最后应该根一个flag标记,支持的flag标记有:
last      相当于Apache里的[L]标记,表示完成rewrite
break     本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect    返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent   返回301永久重定向,浏览器地址会显示跳转后URL地址
last和break标记的区别在于,last标记在本条rewrite规则执行完后,会对其所在的server { }
标签重新发起请求,而break标记则在本条规则匹配完成后,停止匹配,不再做后续的匹配。另有些
时候必须使用last,比如在使用alias指令时,而使用proxy_pass指令时则必须使用break。


五、Rewrite匹配参考示例
例3:以下这段rewrite会导致死循环
location /abc/ {
rewrite ^/abc/(.*).html$ /abc/index.html last;
}

我们应该将上面的last改成break以避免死循环。
redirect permanent区别则是返回的不同方式的重定向,对于客户端来说一般状态下是没有区别
的。而对于搜索引擎,相对来说301的重定向更加友好,如果我们把一个地址采用301跳转方式跳转
的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地
址。使用302重定向时,搜索引擎(特别是google)有时会查看跳转前后哪个网址更直观,然后决定显
示哪个,如果它觉的跳转前的URL更好的话,也许地址栏不会更改,那么很有可能出现URL劫持的现
像。我们在做URI重写时,有时会发现URI中含有相关参数,如果需要将这些参数保存下来,并且在重
写过程中重新引用,我们可以用到 () $N 的方式来解决。

例4:匹配访问的url地址是否是个目录,如果是则自动加个/
if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

例5:用户访问的网址为www.test.com/php/abc.html 重写后真实地址是
www.test.com/php/login.php?user=abc
location ~* /php/.*.html$ {
rewrite /php/(.*).html /php/login.php?user=$1 last;
}

例6:用户访问地址为/uplook/11-22-33.html重写后真实地址为/uplook/11/22/33.html
location /uplook/ {
rewrite /uplook/([0-9]+)-([0-9]+)-([0-9]+).html /uplook/$1/$2/$3.html last;
}

set 指令是用于定义一个变量,并且赋值。应用于server,location,if环境。
语法格式为: set $变量名 变量值

例7:当访问任意目录下的whoami.html 都重定向到 /who.html
location ~* .*/whoami.html$ {
set $who 'who.html';
rewrite .* /$who break;
}

return 指令用于返回状态码给客户端,应用于server,location,if环境。
例8:如果访问的.sh 结尾的文件则返回403操作拒绝错误
location ~* .*.sh$ {
return 403;
}

例9:实现域名跳转
       if ($http_host ~* "www.localhost.com"){
           rewrite   .* http://www.uplooking.com break;
       }  

       if ($http_host ~* "www.localhost.com"){
           rewrite   .* http://www.uplooking.com$request_uri break;
       }


六、last,break详解

 location /break/ {
            rewrite ^/break/.*$ /test/b.html break;
       }  

       location /last/ {
            rewrite ^/last/.*$ /test/l.html last;
       }  

       location /test/ {
            rewrite ^/test/.*$ /t.html break;
       }  

[root@root html]# echo 'break test' > test/b.html
[root@root html]# echo 'last test' > test/l.html
[root@root html]# echo 'test...' > t.html



http://192.168.10.33/break/1.html
http://192.168.10.33/last/1.html



课后练习
1. 配置虚拟主机*.test.com 。当客户端访问任意 XXX.test.com时都能匹配此主机并将
地址重写成 www.test.com/XXX/ (注意,实验之前你应该保证 XXX.test.com都
能正常解析)
修改主配置文件,配置虚拟主机 *.test.com
书写if语句,判断如果以test.com结尾的由进行url重写
test.com 之前的内容保存于一个变量domain中
将原地址重写成 www.test.com/$domain/
[root@root html]# mkdir jack alice
[root@root html]# echo jack.... > jack/index.html
[root@root html]# echo alice...> alice/index.html

a. DNS实现泛解析
*.test.com     网站IP  

b. nginx Rewrite
if ($http_host ~* "^www.localhost.com$" ) {
     break;
  }

if ($http_host ~* "^(.*).localhost.com$" ) {
         set $user $1;
         rewrite .* http://www.localhost.com/$user last;
  }


2. 当用户访问服务器 http://www.test.com/page-uid-123.html 时服务器自动将
地址重写成 http://www.test.com/page.php?uid=123,当访问
http://www.test.com/page-username-123.html重写成 http://www.test.com/page.php?
username=123 。其中123.html可能是任意文件名 XXX.html
配置主配置文件并书写rewrite规则
使用location语句。
在Rewrite中将username和uid字段保存下来,并以变量$1方式引用。
将XXX.html字段保存下来,并以变量$2方式引用。

3. 当用户访问服务器 http://www.test.com/today-pic-112.html 时服务器自动将
地址重写成 http://www.test.com/today/pic/112.html。(注意,此处today pic 可以更换
成其他任意字母,112可以更换成其他任意数字)
配置主配置文件并书写rewrite规则
配置以html结尾的文件做rewrite
将today pic 112 字段分别保存下来并以$1 $2 $3方式引用

八 Tomcat JSP



Tomcat + MySQL
========================================================

方案一:  Tomcat

                                             Tomcat1

方案二:  Apache (负载均衡器)    Tomcat2

            Tomcat3


                                             Tomcat1

方案三:  Nginx (负载均衡器)     Tomcat2

            Tomcat3
========================================================
   

一、Tomcat Http Server
A. JAVA环境
[root@Tomcat ~]# java -version
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.4.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

[root@Tomcat ~]# vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.7.0
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
[root@Tomcat ~]# source /etc/profile
[root@Tomcat ~]# env |grep JAVA
JAVA_HOME=/usr/lib/jvm/java-1.7.0


2. Tomcat
安装Tomcat
[root@localhost jsp]# tar xf apache-tomcat-7.0.34.tar.gz -C /usr/local/
[root@localhost jsp]# cd /usr/local/
[root@localhost local]# ln -s apache-tomcat-7.0.34/ tomcat

定义Tomcat所需的环境变量
[root@node1 local]# vim /etc/profile    //定义Tomcat环境变量
CATALINA_HOME=/usr/local/tomcat     //Tomcat安装目录
export CATALINA_HOME
[root@node1 local]# source /etc/profile
[root@node1 local]# env |grep HOME
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/java/jdk1.7.0_11
HOME=/root

启动Tomcat
方法一:
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh  //启动
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@localhost ~]# netstat -tnlp |grep java
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                   LISTEN      6191/java          
tcp        0      0 :::8009                     :::*                        LISTEN      6191/java          
tcp        0      0 :::8080                     :::*                        LISTEN      6191/java  
     
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh //停止

========================================================
方法二:System V脚本
#[root@node1 ~]# vim /etc/init.d/tomcat
#!/bin/bash      
# Init file for Tomcat server daemon  
#        
# chkconfig: 2345 96 14    
# description: Tomcat server daemon  
JAVA_OPTS='-Xms64m -Xmx128m'  
JAVA_HOME=/usr/java/jdk1.7.0_11  
CATALINA_HOME=/usr/local/tomcat  
export JAVA_OPTS JAVA_HOME CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh $*  

[root@node1 ~]# chmod a+x /etc/init.d/tomcat

[root@node1 ~]# chkconfig --add tomcat
[root@node1 ~]# chkconfig tomcat --list
tomcat          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@node1 ~]# chkconfig tomcat on
[root@node1 ~]#
[root@node1 ~]# service tomcat stop
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@node1 ~]# service tomcat start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_11
Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
========================================================

3. 测试
http://192.168.2.251:8080/


二、Tomcat连接MySQL
1. 安装MySQL(略)

2. 为Tomcat提供连接Mysql的类文件
[root@localhost jsp]# tar xf mysql-connector-java-5.0.8.tar.gz
[root@localhost jsp]# cd mysql-connector-java-5.0.8
[root@localhost mysql-connector-java-5.0.8]# cp mysql-connector-java-5.0.8-bin.jar /usr/local/tomcat/lib/
[root@localhost jsp]# service tomcat stop
[root@localhost jsp]# service tomcat start



三、部署JavaCenter_Home
1. Tomcat默认的网站目录
[root@node1 jsp]# ls /usr/local/tomcat/webapps/   //默认网站的基目录base
docs  examples  host-manager  manager  ROOT
[root@node1 jsp]# ls /usr/local/tomcat/webapps/ROOT //默认网站的主目录
asf-logo.png       bg-nav-item.png  favicon.ico        tomcat.gif        WEB-INF
asf-logo-wide.gif  bg-nav.png       index.jsp          tomcat.png
bg-button.png      bg-upper.png     RELEASE-NOTES.txt  tomcat-power.gif
bg-middle.png      build.xml        tomcat.css         tomcat.svg
[root@localhost ~]# cd /usr/local/tomcat/webapps/ROOT/
[root@localhost ROOT]# rm -rf *          //删除默认网站内容

2. 部署JavaCenter_Home
[root@localhost jsp]# unzip JavaCenter_Home_2.0_Source_UTF8
[root@localhost jsp]# cd JavaCenter_Home_2.0_Source_UTF8
[root@localhost JavaCenter_Home_2.0_Source_UTF8]# ls
source
[root@localhost JavaCenter_Home_2.0_Source_UTF8]# cd source/
[root@localhost source]# ls
src  WebRoot
[root@localhost source]# cd WebRoot/
[root@localhost WebRoot]#
[root@localhost WebRoot]# ls
admin        attachment         cp.jsp           editor.jsp   image       js.jsp     network.jsp  template     xmlrpc.jsp
admincp.jsp  avatar.jsp         crossdomain.xml  errors       index.jsp   link.jsp   rss.jsp      theme
api          config.properties  data             favicon.ico  install     magic.jsp  source       userapp.jsp
app.jsp      contact.jsp        do.jsp           help.jsp     invite.jsp  META-INF   space.jsp    WEB-INF
[root@localhost WebRoot]# cp -rf * /usr/local/tomcat/webapps/ROOT/
[root@localhost source]# service tomcat stop
[root@localhost source]# service tomcat start

http://www.blog.com        //是否支持连接数据库
http://www.blog.com/install     //导库、连库

九 Tomcat虚拟主机



Tomcat虚拟主机
========================================================

一、Tomcat相关配置文件
[root@localhost ~]# ls /usr/local/tomcat/conf/
Catalina  catalina.policy  catalina.properties  context.xml  logging.properties  server.xml  
tomcat-users.xml  web.xml


二、虚拟主机配置
1. 规划
网站       主目录
www.blog.com    /usr/local/tomcat/webapps/ROOT
www.bbs.com   /usr/local/tomcat/webapps/bbs
www.sns.com   /webroot/ROOT

2. 上传网站文件
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/bbs
[root@localhost ~]# unzip ejforum-2.3.zip
[root@localhost ~]# cp -rf ejforum/* /usr/local/tomcat/webapps/bbs/

3. 建立网站所需的数据库,并导入表结构,连接数据库
a. 创建数据库
[root@localhost ~]# mysql -uroot -p123
mysql> create database bbs;
Query OK, 1 row affected (0.00 sec)
mysql> q

b. 导入表结构
[root@localhost ~]# cd ejforum-2.3/install/script/   //SQL文件在解开的压缩包中
[root@localhost script]# ls
easyjforum_hsqldb.sql  easyjforum_mysql.sql  easyjforum_oracle.sql  easyjforum_sqlserver.sql  upgrade
[root@localhost script]# mysql -uroot -p123 bbs < easyjforum_mysql.sql

c. 配置网站连接数据库
改之前:
[root@localhost ~]# vim /usr/local/tomcat/webapps/bbs/WEB-INF/conf/config.xml
       <database maxActive="10" maxIdle="10" minIdle="2" maxWait="10000"
                         username="{USERNAME}" password="{PASSWORD}"
                         driverClassName="com.mysql.jdbc.Driver"
                         url="jdbc:mysql://localhost:3306/{DATABASE}?characterEncoding=gbk&amp;autoReconnect=true&amp;
  autoReconnectForPools=true&amp;zeroDateTimeBehavior=convertToNull"
                         sqlAdapter="sql.MysqlAdapter"/>

改之后:
       <database maxActive="10" maxIdle="10" minIdle="2" maxWait="10000"
                         username="root" password="123"
                         driverClassName="com.mysql.jdbc.Driver"
                         url="jdbc:mysql://127.0.0.1:3306/bbs?characterEncoding=gbk&amp;autoReconnect=true&amp;
autoReconnectForPools=true&amp;zeroDateTimeBehavior=convertToNull"
                         sqlAdapter="sql.MysqlAdapter"/>


3. 虚拟主机
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.blog.com"  appBase="webapps"
           unpackWARs="true" autoDeploy="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="www.blog.com_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="www.bbs.com"  appBase="webapps"
           unpackWARs="true" autoDeploy="true">
          <Context docBase="bbs" path="" />
</Host>

<Host name="www.sns.com"  appBase="/webroot"
           unpackWARs="true" autoDeploy="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="www.sns.com_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
=========================================

十 nginx模块



CoreModule
限速
指令名称: limit_rate、limit_rate_after
使用环境: http, server, location, if in location
示例:
location /download {
limit_rate_after 4m;
limit_rate 512k;
}

限制单个IP最大连接数(线程数)
指令名称: limit_conn_zone
使用环境: http
示例:
http {
limit_conn_zone $binary_remote_addr zone=client_addr:10m;
}
 
指令名称: limit_conn
使用环境: http, server, location
示例:
server {
location /download {
 limit_conn client_addr 1;
}
}

隐藏Nginx版本信息:
# curl --head http://www.localhost.com  //查看主机的响应头信息
http{
server_tokens off;
}


nginx访问控制allow、deny
1、安装模块
这个模块内置在了nginx中,除非你安装中使用了-–without-http_access_module

2、指令
allow
语法:      allow address | CIDR | unix: | all;
默认值:      
配置段:      http, server, location, limit_except
允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.

deny
语法:      deny address | CIDR | unix: | all;
默认值:      
配置段:      http, server, location, limit_except
禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.

3. allow、deny实例
location / {
deny  192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny  all;
}
从上到下的顺序,类似iptables。匹配到了便跳出。如上的例子先禁止了192.16.1.1
接下来允许了3个网段,其中包含了一个ipv6,最后未匹配的IP全部禁止访问.





nginx文件非常小但是性能非常的高效,这方面完胜apache,nginx文件小的一个原因之一是nginx自带的
功能相对较少,好在nginx允许第三方模块,第三方模块使得nginx越发的强大.

在安装模块方面,nginx显得没有apache安装模块方便,当然也没有php安装扩展方便.在原生的nginx,他不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.接下来看看如何安装nginx第三方模块。

nginx第三方模块安装方法:
./configure --prefix=原安装目录  --add-module=/第三方模块目录

以安装pagespeed模块实例
在未安装nginx的情况下安装nginx第三方模块
# ./configure --prefix=/usr/local/nginx-1.4.1
--with-http_stub_status_module
--with-http_ssl_module
--with-http_realip_module
--with-http_image_filter_module
--add-module=../ngx_pagespeed-master --add-module=/第三方模块目录
# make
# make isntall
# /usr/local/nginx-1.4.1/sbin/nginx


在已安装nginx情况下安装nginx模块
# ./configure --prefix=/usr/local/nginx-1.4.1
--with-http_stub_status_module
--with-http_ssl_module --with-http_realip_module
--with-http_image_filter_module
--add-module=../ngx_pagespeed-master
# make
# /usr/local/nginx-1.4.1/sbin/nginx -s stop
# cp objs/nginx /usr/local/nginx/sbin/nginx
# /usr/local/nginx-1.4.1/sbin/nginx
相比之下仅仅多了一步覆盖nginx文件.


总结,安装nginx安装第三方模块实际上是使用–add-module重新安装一次nginx,不要make
install而是直接把编译目录下objs/nginx文件直接覆盖老的nginx文件.如果你需要安装多个nginx第三方模块,你只需要多指定几个相应的–add-module即可.

备注:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面.
nginx提供了非常多的nginx第三方模块提供安装,地址http://wiki.nginx.org/3rdPartyModules
1. 安装
首先安装nginx动态upstream配置模块,如果你已经安装了nginx,那么轻参考ttlsa上的如何安装nginx第三方模块,会安装的请跳过.

# cd /usr/local/src/
# wget https://github.com/yzprofile/ngx_http_dyups_module/archive/master.zip
-O  ngx_http_dyups_module-master.zip
# unzip ngx_http_dyups_module-master.zip
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# tar -xzvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
# ./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module
--add-module=../ngx_http_dyups_module-master/
# make
# make install

十一 其他

限速
防盗链

【Linux基础】 Nginx
END



欢迎扫码领取 0元试听课


以上是关于Linux基础 Nginx的主要内容,如果未能解决你的问题,请参考以下文章

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

逆向及Bof基础实践

Linux基础之命令练习Day7-nginx,nfs

20155307刘浩《网络对抗》逆向及Bof基础

Linux基础-Shell脚本

Linux----------nginx基础