代码拉取完成,页面将自动刷新
Stable version
,这个表示稳定版本,2016-03-22 最新版本是:nginx-1.8.1
,这是一个 tar.gz 的文件链接。
- 传统上基于进程或线程模型架构的 Web 服务通过每进程或每线程处理并发连接请求,这势必会在网络和 I/O 操作时产生阻塞,其另一个必然结果则是对内存或 CPU 的利用率低下。生成一个新的进程/线程需要事先备好其运行时环境,这包括为其分配堆内存和栈内存,以及为其创建新的执行上下文等。这些操作都需要占用 CPU,而且过多的进程/线程还会带来线程抖动或频繁的上下文切换,系统性能也会由此进一步下降。
- 在设计的最初阶段,Nginx 的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型。受启发于多种操作系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在 Nginx 中,连接请求由为数不多的几个仅包含一个线程的进程 Worker 以高效的回环(run-loop)机制进行处理,而每个 Worker 可以并行处理数千个的并发连接及请求。
- 如果负载以 CPU 密集型应用为主,如 SSL 或压缩应用,则 Worker 数应与 CPU 数相同;如果负载以 IO 密集型为主,如响应大量内容给客户端,则 Worker 数应该为 CPU 个数的 1.5 或 2 倍。
- Nginx会按需同时运行多个进程:一个主进程(Master)和几个工作进程(Worker),配置了缓存时还会有缓存加载器进程(Cache Loader)和缓存管理器进程(Cache Manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而 Worker、Cache Loader 和 Cache manager 均应以非特权用户身份运行。
- 主进程主要完成如下工作: - 1.读取并验正配置信息; - 2.创建、绑定及关闭套接字; - 3.启动、终止及维护worker进程的个数; - 4.无须中止服务而重新配置工作特性; - 5.控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本; - 6.重新打开日志文件,实现日志滚动; - 7.编译嵌入式perl脚本;
- Worker 进程主要完成的任务包括: - 1.接收、传入并处理来自客户端的连接; - 2.提供反向代理及过滤功能; - 3.nginx任何能完成的其它任务;
- Cache Loader 进程主要完成的任务包括: - 1.检查缓存存储中的缓存对象; - 2.使用缓存元数据建立内存数据库;
- Cache Manager 进程的主要任务: - 1.缓存的失效及过期检验;
官网下载最新稳定版本 1.8.1,大小:814K
官网安装说明:https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
源码编译配置参数说明:
开始安装:
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
mkdir -p /usr/local/nginx /var/log/nginx /var/temp/nginx /var/lock/nginx
tar zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1/
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/local/nginx/nginx.pid \
--lock-path=/var/lock/nginx/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
make
make install
启动 Nginx
cd /usr/local/nginx;ll
,正常的效果应该是显示这样的:drwxr-xr-x. 2 root root 4096 3月 22 16:21 conf
drwxr-xr-x. 2 root root 4096 3月 22 16:21 html
drwxr-xr-x. 2 root root 4096 3月 22 16:21 sbin
service iptables stop
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo service iptables save
sudo service iptables restart
/usr/local/nginx/sbin/nginx
,启动完成 shell 是不会有输出的ps aux | grep nginx
,正常是显示 3 个结果出来netstat -ntulp | grep 80
192.168.1.114
,如果能看到:Welcome to nginx!
,即可表示安装成功/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
vim /var/log/nginx/error.log
vim /etc/init.d/nginx
#!/bin/bash
#nginx执行程序路径需要修改
nginxd=/usr/local/nginx/sbin/nginx
# nginx配置文件路径需要修改
nginx_config=/usr/local/nginx/conf/nginx.conf
# pid 地址需要修改
nginx_pid=/var/local/nginx/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
# pid 地址需要修改
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/local/nginx/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
chmod 755 /etc/init.d/nginx
service nginx start
service nginx stop
service nginx restart
vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
service iptables stop
,防止出现特别干扰vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 一个 server 代表一个虚拟主机
server {
listen 80;
server_name localhost;
location / {
# 虚拟机根目录是 /usr/local/nginx/html 目录
root html;
# 虚拟机首页是 /usr/local/nginx/html 目录下这两个文件
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
# 第二个虚拟机的端口是 90,服务地址还是本地
listen 90;
server_name localhost;
location / {
root html90;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 一个 server 代表一个虚拟主机
server {
listen 80;
# 两个虚拟主机都使用 80 端口,设置不同域名
server_name code.youmeek.com;
location / {
# 虚拟机根目录是 /usr/local/nginx/html 目录
root html;
# 虚拟机首页是 /usr/local/nginx/html 目录下这两个文件
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
# 两个虚拟主机都使用 80 端口,设置不同域名
server_name i.youmeek.com;
location / {
root html-i;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
最精简的环境:一台虚拟机
Nginx 配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 自己定义的两个 tomcat 请求地址和端口
# 也就是当浏览器请求:tomcat.youmeek.com 的时候从下面这两个 tomcat 中去找一个进行转发
upstream tomcatCluster {
server 192.168.1.114:8080;
server 192.168.1.114:8081;
# 添加 weight 字段可以表示权重,值越高权重越大,默认值是 1,最大值官网没说,一般如果设置也就设置 3,5,7 这样的数
# 官网:https://www.nginx.com/resources/admin-guide/load-balancer/#weight
# server 192.168.1.114:8080 weight=2;
# server 192.168.1.114:8081 weight=1;
}
server {
listen 80;
server_name tomcat.youmeek.com;
location / {
proxy_pass http://tomcatCluster;
index index.html index.htm;
}
}
}
在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性 client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;
将timeout设低来防止DOS攻击 所有这些声明都可以放到主配置文件中。 client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;
限制用户连接数来预防DOS攻击 limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 5;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。