1.安装:
利用源码安装nginx服务器:https://www.cnblogs.com/pjishu/p/11029085.html,先别启动,只完成前5点
2.写一个脚本
cd /etc/init.d/
vi nginx
把下面东西放进去:
#!/bin/bash # chkconfig: - 30 21 # description: http service. # Source Function Library . /etc/init.d/functions # Nginx Settings NGINX_SBIN="/opt/sxt/nginx/sbin/nginx" NGINX_CONF="/opt/sxt/nginx/conf/nginx.conf" NGINX_PID="/opt/sxt/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n $"Starting $prog: " mkdir -p /dev/shm/nginx_temp daemon $NGINX_SBIN -c $NGINX_CONF RETVAL=$? echo return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p $NGINX_PID $NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=$? echo return $RETVAL } reload(){ echo -n $"Reloading $prog: " killproc -p $NGINX_PID $NGINX_SBIN -HUP RETVAL=$? echo return $RETVAL } restart(){ stop start } configtest(){ $NGINX_SBIN -c $NGINX_CONF -t return 0 } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; *) echo $"Usage: $0 {start|stop|reload| restart|configtest}" RETVAL=1 esac exit $RETVAL
再赋权:chmod +x nginx
开启:service nginx start
随后:cd /opt/sxt/nginx/conf 该目录有nginx的文件。vi nginx.conf,观察:
work_processes 1 : 表示有一个工作进程,其实nginx的进程个数==CPU核心数。另开一个窗口输入ps -fe | grep nginx,可以发现:该work进程由mast_processs读nginx.conf文件创建生成,且负责客户端的连接请求。
输入:ulimit -a 看到open files:1024,表示一个进程可以创建1024个文件描述符,也就是只能开启最多1024个io流,通过观察nginx.conf,发现事实上不能和客户端创建超过1024个连接。
说明:nginx.conf中的send file on指的是:在内核新造2个文件描述符,当要回复客户端的链接时,内核通过文件描述符从磁盘拿出东西来,不用再给用户空间的Nginx了,而是直接通过另一个文件描述符把内容输出到网线,这样更快捷。tcp_onpush on 表示开启缓存机制。keepalive_timeout:保持第一次链接的时间。gzip:on表示服务器要发出去东西时,先压缩起来,再传到网线里面。server表示一个虚拟的web服务器,当外面的客户端浏览器输入网址后,window的hosts文件将其转化为ip(若没有,则去互联网的域名服务器搜索),随后给到nginx,nginx根据ip,port(server里面的listen),和host(http请求头会给出,对应到nginx.conf的server_name)。
server里面的location表示的是,服务器的资源在哪里,当浏览器输入的url和location匹配时,去磁盘对应的位置去取出来。
小知识点:当在xshell里面输入ls+回车时,这三个字节会变成一个数据包发给Linux服务器,Linux解析里面的字符串,再交给bash,bash启动了ls之后,把该目录的内容作为数据包发回window客户端,然后xshell解析数据包最后输出到屏幕。
小知识点:!ser:会在历史输入的命令当中,从后向前找到名字开头是ser的命令,然后执行。
实验(未完成,p33节也没看):
修改server_name为:www.aaa.com,同时修改Windows的hosts文件,再添加一个location:
location /asd {
proxy_pass http://192.168.9.12/;
}
意思是:让node01作为代理服务器,当输入wwww.aaa.com/asd时,node01的nginx根据www.......com拿到请求,随后把后面的作为location去匹配,然后转到node02,然后node02返回资源的结果,此时nginx起着反向代理的作用。
不过,为了防止node02因为访问压力过大,要将链接均分配给其他服务器,需要在http{里面server{外面,添加定义upstream:
upstream asd(作为upstream的随便一个名字){
server 192.168.10.12;
server 192.168.10.13;
}
然后改动之前的location:
location /asd {
proxy_pass http://asd/;
}
再讲keepalive 那行注释掉,以禁止客户端和服务器的绑定。
3.
加一个location:
location /aaa {
proxy_pass http://www.baidu.com/;
}
当客户端请求时,先去看看upstream,如果不是,再去dsn,不过,此时可能会报错,因为可能缺少默认网关,补上:
route add default gw 网关ip
此时:!ser重启服务。然后客户端浏览器访问:https://www.aaa.com/aaa,会出现百度页面,此时网址栏不会发生变化(因为如果是http,那么在nginx代理完后,百度返回的是一个https,然后客户端得拿https去访问百度,使得地址栏发生变化)。
4.
先利用xftp把Apach包传进node02