基于Centos7.2的nginx部署
部署背景:使用Nginx作为Tomcat的负载平衡器。
部署步骤:
- 安装zlib-devel、pcre-devel等依赖包
[[email protected] ~]# yum install -y gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
注:结合proxy和upstream模块实现后端web负载均衡
结合nginx默认自带的ngx_http_proxy_module模块 和ngx_http_upstream_module模块实现后端服务器的健康检查。
Proxy:实现反向代理
Upstream:实现负载均衡
- 创建nginx用户
[[email protected] ~]# useradd -s /sbin/nologin www
[[email protected] ~]# grep www /etc/passwd ##查看nginx用户www是否建立
www:x:1000:1000::/home/www:/sbin/nologin
- 编译安装nginx
[[email protected] src]# tar -zxvf nginx-1.13.0.tar.gz
[[email protected] src]# cd nginx-1.13.0
[[email protected] nginx-1.13.0]# ./configure --prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_flv_module && make && make install
其中:--prefix=/usr/local/nginx1.10表示nginx包安装路径
- 创建nginx软连接,方便nginx程序的执行
[[email protected] nginx-1.13.0]# ln -s /usr/local/nginx1.10/sbin/nginx /usr/local/sbin/
- nginx语法检查
[[email protected] nginx-1.13.0]# nginx -t
- 编写nginx服务脚本
[[email protected] ~]# vim /etc/init.d/nginx
#!/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: /usr/local/nginx1.10/conf/nginx.conf
# pidfile: /usr/local/nginx1.10/logs/nginx.pid
nginxd=/usr/local/nginx1.10/sbin/nginx
nginx_config=/usr/local/nginx1.10/conf/nginx.conf
nginx_pid=/usr/local/nginx1.10/logs/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
nginx="/usr/local/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
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
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
- 添加开机自启动服务
[[email protected] ~]# chmod +x /etc/init.d/nginx
[[email protected] ~]# chkconfig --add nginx
[[email protected] ~]# chkconfig nginx on
[[email protected] ~]# chkconfig --list |grep nginx
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 启动nginx服务
[[email protected] ~]# /usr/local/sbin/nginx start
nginx: invalid option: "start"
[[email protected] ~]# /etc/init.d/nginx start
Starting nginx (via systemctl): Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[FAILED]
以上我们可以看出,nginx启动失败!以下是解决方法:
[[email protected] ~]# /usr/local/sbin/nginx
[[email protected] ~]# /etc/init.d/nginx start
Starting nginx (via systemctl): [ OK ]
- 配置nginx反向代理:作用是(反向代理+负载均衡+健康探测)
修改nginx主配置文件:
[[email protected] ~]# vim /usr/local/nginx1.10/conf/nginx.conf
user www www;
worker_processes 2;
worker_cpu_affinity 0101 1010;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events{
use epoll;
worker_connections 4096;
}
http{
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent"$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log logs/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#Compression Settings
gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascriptapplication/xml;
gzip_vary on;
#end gzip
# http_proxy Settings
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
#load balance Settings
upstream backend_tomcat {
server 192.168.100.126:8080 weight=1 max_fails=2 fail_timeout=10s; ##需要更改为tomcat的ip
server 192.168.100.127:8080 weight=1 max_fails=2 fail_timeout=10s; ##需要更改为tomcat的ip
}
#virtual host Settings
server{
listen 80;
server_name www.benet.com;
charset utf-8;
location / {
root html;
index index.jsp index.html index.htm;
}
location ~* \.(jsp|do)$ {
proxy_pass http://backend_tomcat;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.100.0/24; ##需要更改tomcat的ip段
deny all;
}
}
}
- 重启使其生效
[[email protected] conf]# /usr/local/sbin/nginx
[[email protected] conf]# service nginx restart
Restarting nginx (via systemctl): [ OK ]
- [[email protected] ~]# firewall-cmd --permanent --add-port=80/tcp
success
[[email protected] ~]# firewall-cmd --reload
success
以上就是nginx部署的基本步骤!