nginx小结
一. (引子) Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的十分轻量级的HTTP 和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是 Apache服务器不错的替代品。Nginx是俄罗斯人编写的十分轻量级的HTTP服务器。
1.你通过命令curl -I 163.com
curl -I qq.com
curl -I taobao.com
curl -I sina.com

。。。。。。。。
均可查看各个大型网站所使用的服务是否是nginx,有的网站可以显示版本号,说明一下,对于一个好的管理员来说,最好不要显示这些版本号,因为这样让一些不法分子知道你的版本号之后容易对你的网站***呢。从网站或者服务器上下载合适版本的nginx,处已nginx-1.0.6.tar.gz版本为例,下载之后解压缩,产生目录nginx-1.0.6, cd nginx-1.0.6/进入目录,在此目录下
1. ./configure( 是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),该命令的执行必须在你解压的第一层路径执行,即顶级路径)
2 . make(make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示)。
3 make insall (这条命令来进行安装这一步一般需要你有 root 权限(因为要向系统写入文件)
(以上三步是编译源码的三部曲)
在上述三步中可能会在编译检测的时候报错,可能会提示你安装一些软件,
yum install -y pcre-devel openssl-devel gcc zlib-devel
(gcc 是因为那个配置文件使用C编写的)
二.
1,安装
useradd -s /sbin/nologin -M nginx(添加用户,因为nginx文件的的使用用户是nginx,也可以以后用的时候添加)
cd /nginx-1.0.6
vi auto/cc/gcc

将#debug
#CFLAGS=“$CFLAGS -g”(这一行如果不注释,du -sh /usr/local/nginx 等一会编译完成程序会有几兆,注释之后就剩几百K了)
vi src/core/nginx.h
#define NGINX_VERSION "1.0.6"
#define NGINX_VER "nginx
"(去掉后面的版本号,这样为了安全起见,外界访问的时候不会对外公开)
(#这里的#并不是注释,而是C语言的预定义)
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
(指出用户,用户组,--prefix用于指明安装路径,这里指的是是将所有的安装文件等全部放在指定的目录中,要是你要卸载该配置文件,直接删除此目录文件即可,即是:rm -rf /usr/local/nginx 即可。--with-http_stub_status_modules是状态加载模块,默认的不加载。--with-http_ssl_module支持加密,)
make(make clean 或者make tidy。make clean删除源代码(C\C++ code)生成的执行文件和所有的中间目标文件)
make install
ln -s /usr/local/nginx/sbin /usr/sbin (建立软连接)
或者是写进:
vi .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin
source .bash_profil
e(重新读取文件,将你更新的内容读进去)
2.(1)配置
vi /usr/local/nginx/conf/nginx.conf(编辑nginx的主配文件)
user nginx nginx;(指明使用的用户和组)
worker_processes 4;(制定工作衍生的进程数)
error_log logs/error.log info;(错误日志定义类型)
pid logs/nginx.pid

events {
use epoll;(使用高效网络I/O模型)
worker_connections 1024;(允许的连接数)
}
编辑完保存退出,
nginx -t(用于测试)(注意改动的文件要在/usr/local/nginx/conf/nginx.conf中改动文件哦,切不可在nginx-1.0.6下的文件改动啊,成功说明你改动的正确)
启动命令:nginx
外部测试:http:192.168.0.115(此时apache要是关着的哈,也就是/etc/init.d/httpd status 是stop 的。那么此时访问的文件就是/usr/local/nginx/html/index.html)
停止nginx 服务:
nginx -s stop
压力测试:
ab -n 1000 -c 1000 http://192.168.0.115/index.html
(ab是apache自带的网络压力测试工具,-n在测试会话中所执行的请求个数,默认时,仅执行一个请求,-c一次产生的请求个数,默认是一次一个)
Requests per second: 1426.75 [#/sec] (mean)
在服务器上netstat -altunp 可以查询(在这里是server15)
注意:在改动配置文件的时候容易造成括号不匹配的情况,故在编辑/usr/local/nginx/conf/nginx.conf(编辑nginx的主配文件)的时候注意的是用vim编辑器.另外注意在./configrue 的时候记得要加选项,-with-http_stub_status_module --with-http_ssl_module,这样在你配置证书的时候才不至于出错,还有需要注意的是在
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
这样的错误的时候注意是因为nginx 的PID坏了,你应该用killall nginx 杀死与nginx有关的进程,然后用nginx -t 检测配置文件的正确性,nginx 启动服务,nginx -s reload 重新加载。
(2). 查看nginx状态的地址
location /status {
stub_status on;
access_log off;
}

保存退出, nginx -t(测试修改是否正确)
nginx -s reload(从新启动服务,相当于/etc/init.d/httpd reload)
访问:http://192.168.0.115/status
(3)要想访问https://192.168.0.115
需要在配置文件中将注释
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate cert.pem;(需要手工生成)
ssl_crtificate_key cert.pem;(注意上下的两个key的名字和下面的钥匙的名字一致的)
ssl_sessio_timeout 5m;
。。。。。
ssl_prefer_server_ciphers on;

location /{
root /html;(意思是通过https://192.168.0.115来访问的默认目录)
index index.html idex.htm;(意思是你在测试的时候默认找的文件是index.html或者)
}
}
在/etc/pki/tls/certs下执行 make cert.pem
然后 mv cert.pem /usr/local/nginx/conf
netstat -atnlp | grep :443可看到443端口开启了。(注意这个端口的开启得在你在你的nginx 是开启的状态下才可以查看得到的)
从新启动nginx,然后https://192.168.0.115访问即可
view 可以查看你刚才设置的证书内容。
(4) 配置虚拟机
server {
listen 80;
server_name www15.example.com;
access_log logs/www15.example.com.access.log main;
location / {
index index.html;
root /www15;
}
}

然后配置好后,nginx -t 测试成功之后,然后从新 nginx -s reload
mkdir /www15
echo `hostname`> index.html

之后访问http://www15.example.com 即可
(5)http://wiki.nginx.org/NginxChsLoadBalanceExample可参考
一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。
vi /usr/local/nginx/conf/nginx.conf

user  nginx nginx;
worker_processes  4;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

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

    upstream westos {
    server 192.168.0.75
weight=3;(权重为3意思就是访问的时候这个网页出现的次数为占的比重为3)
    server 192.168.0.31;
    }
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  desktop75.example.com;
        location / {
    root html;
    index index.html idex.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen       80;
        server_name  www.example.com;
        location / {
    proxy_pass http://westos;
(//注意这里的//westos是与之上的upstream 后面的westos同名的。)
        }
}
}
在这里你要注意的是括号的匹配问题,还有就是你配upstream的时候是在虚拟机上,所有你需要多写一个server,
由于中间会有扰乱,你可以尝试将无用的注释去掉。
server_name www.sushan.org;(//在你的客户端访问的时候你输入http://www.sushan.org有可能无法访问,此时你可以在客户端的 /etc/hosts下面下上一条解析: 192.168.0.124 www.sushan.org,注意在/etc/hosts下一个IP地址你可以解析很多的地址,也就是所你访问哪个解析地址的时候会给您连接到那个对应的IP地址。不断刷新会在2个负载均衡的机子上刷新,当一台关闭的时候,会自动跳转到下一台)
然后配置好后,nginx -t 测试成功之后,然后从新 nginx -s reload
在访问你的http://www15.example.com刷新会不断变换。
三。yum install xinetd telnet-server -y
示例: telnet localhost
telnet 192.168.0.115

telnet默认不允许以root身份登陆到服务器上,为了安全。
vi /etc/xinetd.conf
Define access restriction defaults
no_access = 192.168.0.115(不让该ip进入)
only_from = (只允许)
cps = 50 10 (意思是每秒连接超过50次后,接下来的十秒不连接)
instance =50(最大的连接量)
per-source =10 (并发的)
ldd /usr/sbin/sshd ldd /usr/sbin/nginx 该命令用于判断某个可执行的 binary 档案含有什么动态函式库
查看含有 libwrap.so.....的就是支持tcp环绕的。
使用telent要执行chkconfig --list 后面显示含有telnet ,没有的话要启动chkconfig --level 5 xinetd on
限制和允许访问ssh 和telnet
vi /etc/hosts.allow
添加允许的网段或网址如: sshd:192.168.0.(0之后要有.哦)
in.telnetd:192.168.0.22
添加禁止的网段或网址如:sshd:192.168.0.(0之后要有.哦)
in.telnetd:192.168.0.22
或者
hosts.deny
sshd:all
hosts.allow
sshd:192.168.0.15(禁止所有之后,然后添加允许的网段或者网址)
在hosts.allow和hosts.deny发生冲突时,以hosts.allow的优先级最高。
(注意:在改动hosts.allow和hosts.deny中东西时,不用启动任何服务,立即生效)