Nginx
程序员文章站
2022-03-04 12:47:33
...
什么是Nginx?
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
特点是占有内存少,并发能力强,nginx 的并发能力确实在同类型的网页服务器中表现非常好。
大型网站高并发处理 使用Nginx+lvs 。
Tomcat在250人同时访问时开始出现连接丢失问题
Nginx 纵深对比其优缺点
Nginx 和 apache 的优缺点
1.nginx 相对于 apache 的优点:
轻量级,同样起 web 服务,比 apache 占用更少的内存及资源高并发
nginx 处理请求是异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx 保持低资源低消耗高性能高度模块化的设计,编写模块相对简单,还有,它社区活跃,各种高性能模块出品迅速(十几年时间发展)
2.apache 相对于 nginx 的优点:
Rewrite 重写 ,比 nginx 的 rewrite 强大模块多,基本想到的都可以找到少 bug ,nginx 的 bug 相对较多。(出身好起步高)
3.Nginx 配置简洁, Apache 复杂
安装和部署
1. node01,node02,node03搭建JDK运行环境
复制压缩包到/usr/soft,解压`rpm –ivh jdk-7u67-linux-x64.rpm`,自动配置好
2. node01,node02,node03搭建Tomcat
复制压缩包到/usr/soft,解压`tar -zvxf apache-tomcat-7.0.61.tar.gz`到当前文件夹下
进Tomcat/bin目录
./startup.sh 开启
./shutdown.sh 关闭
3. 安装之前准备
3.1 下载依赖 `gcc` `openssl-devel` `cre-devel` `zlib-devel`
安装:yum install gcc openssl-devel pcre-devel zlib-devel -y
全: yum install -y gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel
3.2 创建用户和用户组。为了方便nginx运行而不影响linux安全
创建组:groupadd -r nginx
创建用户:useradd -r -g nginx -M nginx
-M 表示不创建用户的家目录。
3.3 上传`tengine-2.1.0.tar`到`/usr/soft`目录下,解压`tar -zxvf tenginx-2.1.0.tar`
3.4进入`tenginx-2.1.0`文件夹执行配置
./configure
或
./configure --prefix=/usr/local/nginx
或
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module
3.5 编译并安装
make && make install
默认安装目录:/usr/local/nginx
3.6 配置Nginx为系统服务,以方便管理
3.6.1、在`/etc/rc.d/init.d/`目录中建立文本文件nginx
3.6.2、在文件中粘贴下面的内容:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
3.6.3、修改nginx文件的执行权限
chmod +x nginx
3.6.4、添加该文件到系统服务中去
chkconfig --add nginx
系统服务中开启该文件
chkconfig nginx on
查看是否添加成功
chkconfig --list nginx
3.7、启动,停止,重新装载
service nginx start|stop
Nginx配置
nginx 默认配置详解
#进程数,建议设置和 CPU 个数一样或 2 倍
worker_processes 2;
#日志级别
error_log logs/error.log warning;(默认 error 级别)
# nginx 启动后的 pid 存放位置
#pid logs/nginx.pid;
events {
# 配置每个进程的连接数,总的连接数= worker_processes * worker_connections
#默认 1024
worker_connections 10240; }
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.php index.html index.htm; #定义首页索引文件的 名称
}
#定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html { root html; } }
负载均衡机制:
nginx 支持以下负载均衡机制(或方法):
a) 轮询 - 对应用程序服务器的请求以循环方式分发,
b) 最少连接数 - 将下一个请求分配给活动连接数最少的服务器
c) ip-hash - 哈希函数用于确定下一个请求(基于客户端的 IP
地址)应该选择哪个服务器。
默认负载平衡配置
http {
upstream shsxt{
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://shsxt;
}
}
}
加权负载平衡
upstream shsxt {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
最少连接负载平衡
upstream shsxt {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
会话持久性
upstream shsxt{
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
解决Session一致性问题
安装memcached,实现session的共享
1.在主节点安装memcached,yum –y install memcached
2.安装telnet和telnet服务,yum -y install telnet telnet-server
3.把需要的jar包拷贝到副节点的tomcat的lib目录下
4.配置副节点tomcat下conf目录下的context.xml,注意修改ip,此处修改为主节点IP
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.198.111:11211"
sticky="true"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
5.修改/webapps/ROOT/index.jsp,显示session的ID
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
6.副节点开启tomcat,主节点开启memcached
memcached -d -m 128m -p 11211 -l 192.168.198.111 -u root -P /tmp/
注:修改tomcat配置文件要及时关闭,打不开的话要清理tomcat缓存
Linux环境下清理Tomcat缓存
1.进入`tomcat/bin`目录下,执行`sh shutdown.sh`命令关闭tomcat。
2.然后执行命令 `ps -aux | grep tomcat` 命令?,查看tomcat命令是否真的关闭
3.如果没有关闭执行 `kill -9 #pid` 来彻底关闭tomcat(#pid是tomcat的进程ID)?
root 17505 0.0 0.0 63344 768 pts/1 S+ 10:22 0:00 grep tomcat?
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND?
4.最后进入`tomcat/work`目录下?,执行` rm -rf Catalina `来删除缓存文件
5.执行`ls ?`确认是否删除,如果work目录下没有Catalina文件夹说明删除成功。
6.在进入`tomcat/bin`目录下,执行`sh startup.sh`命令来重启tomcat。
上一篇: nginx在linux下的安装 centOS 7.4
下一篇: asp.net 泛型判断类型
推荐阅读
-
nginx运作php
-
apache前端+nginx后端,nginx如何rewrite正确的地址
-
【已解决】求助centos6 nginx upstream不能转发到我自己定义的内部端口
-
nginx的zabbix 5.0安装部署的方法步骤
-
php升级 - 正在运行中的服务器,如何平滑从php5.2升级到php5.3 ,linux+php-fpm+nginx
-
PHP+FastCGI+Nginx配置PHP运行环境,fastcginginx
-
Linux中Nginx反向代理下的tomcat集群的详解
-
FreeBSD7.0编译安装nginx+php+mysql
-
生产环境之Nginx高可用方案实现过程解析
-
Nginx状态监控以及日志分析详解