centosnginx自动启动脚本
㈠ centos7怎么编译安装nginx
安装环境为:最小化安装的centos7,关闭seliunx。
最小化安装centos:
关闭selinux
sed –i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
开始安装nginx1.7.8
创建群组
groupadd www
创建一个用户,不允许登陆和不创主目录
useradd -s /sbin/nologin -g www -M www
#下载最新版nginx
wget -C http://nginx.org/download/nginx-1.7.8.tar.gz
tar zxvf nginx-1.7.8.tar.gz
#编译基本能运行的nginx
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_mole --with-http_ssl_mole --with-http_gzip_static_mole
make
make install
如果有错误提示:
./configure: error: C compiler cc is not found
解决方法:
yum install gcc gcc-c++
如果有错误提示:
./configure: error: the HTTP rewrite mole requires the PCRE library.
You can either disable the mole by using –without-http_rewrite_mole
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using –with-pcre=<path> option.
解决方法:
yum install pcre-devel
如果有错误提示:
./configure: error: SSL moles require the OpenSSL library.
You can either do not enable the moles, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using –with-openssl=<path> option.
解决方法:
yum install openssl-devel
以上错误提示依次解决后:再一次的运行
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_mole --with-http_ssl_mole --with-http_gzip_static_mole
make
meke install
编译参数解释:
#指定运行权限的用户
--user=www
#指定运行的权限用户组
--group=www
#指定安装路径
--prefix=/usr/local/nginx
#支持nginx状态查询
--with-http_stub_status_mole
#开启ssl支持
--with-http_ssl_mole
#开启GZIP功能
--with-http_gzip_static_mole
因此要顺利的通过nginx编译安装必须安装的依赖关系有:
yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel
2、在 centos7 中为nginx的启动、重启、重载配置添加脚本
nginx直接启动的方法:
/usr/local/nginx/sbin/nginx
但是不是很方便,因此使用下面的脚本来控制nginx的启动关闭重载更加合理一些。
编辑文件:vim /usr/lib/systemd/system/nginx.service 添加下面的脚本,注意路径 !
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl的一些使用方法:
systemctl is-enabled servicename.service #查询服务是否开机启动
systemctl enable xxx.service #开机运行服务
systemctl disable xxx.service #取消开机运行
systemctl start xxx.service #启动服务
systemctl stop xxx.service #停止服务
systemctl restart xxx.service #重启服务
systemctl reload xxx.service #重新加载服务配置文件
systemctl status xxx.service #查询服务运行状态
systemctl --failed #显示启动失败的服务
因此,添加上面脚本后,centos7 中操作nginx的方法有
systemctl is-enabled nginx.service #查询nginx是否开机启动
systemctl enable nginx.service #开机运行nginx
systemctl disable nginx.service #取消开机运行nginx
systemctl start nginx.service #启动nginx
systemctl stop nginx.service #停止nginx
systemctl restart nginx.service #重启nginx
systemctl reload nginx.service #重新加载nginx配置文件
systemctl status nginx.service #查询nginx运行状态
systemctl --failed #显示启动失败的服务
㈡ centos 7 启动程序 带参数d 是什么意思
首先,系统貌似没有加 d 的参数,除非程序是你自己开发的特定程序,加d为特定参数。
linux 添加开机启动项的三种方法。
(1)编辑文件 /etc/rc.local
输入命令:vim /etc/rc.local 将出现类似如下的文本片段:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/mysqld start #mysql开机启动
/etc/init.d/nginx start #nginx开机启动
/etc/init.d/php-fpm start #php-fpm开机启动
/etc/init.d/memcached start #memcache开机启动
#在文件末尾(exit 0之前)加上你开机需要启动的程序或执行的命令即可(执行的程序需要写绝对路径,添加到系统环境变量的除外),如:
/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/etc/thttpd.conf
(2)自己写一个shell脚本
将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。
(3)通过chkconfig命令设置
将启动文件cp到 /etc/init.d/或者/etc/rc.d/init.d/(前者是后者的软连接)下
vim 启动文件,文件前面务必添加如下三行代码,否侧会提示chkconfig不支持
#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)//两行都注释掉!!!,此行代码必须
chkconfig --add 脚本文件名 操作后就已经添加了
㈢ nginx编译安装服务启动脚本在哪
在你编译是 --prefix=指定的目录下有一个bin目录,里面有一个nginx启动脚本,如果没有指定,默认在/usr/local/nginx下,即/usr/local/nginx/sbin/nginx
㈣ 怎么在centos 6.5安装nginx
一、准备事项
(1) 因为nginx需要访问80端口所以请先关闭或者开放防火墙端口,和selinux。
参考命令
关闭防火墙:
[root@local ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@local ~]# service iptables save
关闭selinux:
[root@local ~]# setenforce 0
[root@local ~]# vim /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
(2) 如果用到域名请自行构建DNS服务
二、安装
(1) 因为nginx的运行需要安装pcre、zlib等软件包,因此我们进行安装
Pcre=Pcre Compatible Regular Expressions(中文pcre兼容正则表达式)
Yum配置请参考: http://www.linuxidc.com/Linux/2015-11/125332.htm
[root@local ~] yum -y install pcre* zlib* #或者进行编译安装
[root@local ~]# useradd -M -s /sbin/nologin nginx #创建nginx服务
启动用户
(3) 编译安装nginx,下载地址:http://nginx.org/en/download.html 此次安装为最新稳定版nginx-1.8.0
[root@local ~]# tar zxf nginx-1.8.0.tar.gz
[root@local ~]# cd nginx-1.8.0
[root@local nginx-1.8.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@local nginx-1.8.0]# ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.8.0 --with-http_stub_status_mole --with-http_ssl_mole #./configure –help 参数详解
[root@local nginx-1.8.0]# make
[root@local nginx-1.8.0]# make install
(4) 制作软连接
[root@local nginx-1.8.0]#ln –a /application/nginx-1.8.0/
/application/nginx
(5) 基本使用
#语法检查
[root@local nginx-1.8.0]# /application/nginx/sbin/nginx –t
nginx: the configuration file /application/nginx-1.8.0/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.8.0/conf/nginx.conf test is successful
#启动服务
[root@local nginx-1.8.0]# /application/nginx/sbin/nginx
#端口检查
[root@local nginx-1.8.0]# netstat –lnt
#检查进程
[root@local nginx-1.8.0]# ps -ef | grep nginx #端口信息保存在
/application/nginx/logs/ nginx.pid 文件中
#通过端口查看占用进程
[root@local nginx-1.8.0]# lsof -i :80
#错误日志
/application/nginx/logs/error.log
三、编写nginx服务脚本
为了方便使用习惯,通过server 来启动、关闭、开启、重载nginx服务所以我们来编
写nginx的服务脚本(自己编写的脚本仅供参考!)
[root@local ~]# vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Server Contorl Script
PROG="/application/nginx/sbin/nginx"
PIDF="/application/nginx/logs/nginx.pid"
ok=`echo -e "\e[1;31m [ok] \e[0m"`
no=`echo -e "\e[1;31m [no] \e[0m"`
detection=`/application/nginx/sbin/nginx -t 2>&1`
screen_1=`echo $detection | awk '{print $6,$7,$8}'`
screen_2=`echo $detection | awk '{print $13,$14,$15}'`
if [ "$screen_1" = "syntax is ok" ] && [ "$screen_2" = "test is successful" ];
then
case "$1" in
start)
$PROG
echo "Nginx Is starting state $ok"
;;
stop)
kill -s QUIT $(cat $PIDF)
echo "Nginx Is closing state $ok"
;;
restart)
$0 stop
$0 start
echo "Nginx Is to restart state $ok"
;;
reload)
kill -s HUP $(cat $PIDF)
echo "Nginx Is overloaded state $ok"
;;
*)
echo "Usage: $0 (start|stop|restart|reload)"
exit 1
esac
else
echo "Nginx check state $no "
echo "Please check the configuration file"
echo "$detection"
fi
exit 0
[root@local ~]# chmod +x /etc/init.d/nginx
[root@local ~]# chkconfig –add nginx #添加为系统服务
[root@local ~]# chkconfig nginx on
四、简单的nginx web站点
Nginx的默认站点目录,是安装目录下的html这里是(/application/nginx/html)
在主配置文件/application/nginx/conf/nginx.conf 中查看,对于重新部署web页面
只需将/application/nginx/html/中的index.html替换即可
主配置文件讲解
[root@local ~]# egrep -v "#|^$" /application/nginx/conf/nginx.conf
worker_processes 1; #指定Nginx开启的进程数
events { #设定Nginx的工作模式及连接数上线
worker_connections 1024;
}
http {
include mime.types; #主模块命令,实现对配置文件所有包含文件的设置
default_type application/octet-stream; #属于http核心模块命令,这里设
置类型为二进制流,也就是当文件类型未定义时使用这种方式,例如,没有配置PHP
环境时,nginx是不给予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
sendfile on; #用于高效文件传输模式
keepalive_timeout 65; 设置客户端请求头文件读取超时时间,如果超过这个时
间服务器会关闭该连接。
server { #定义虚拟主机开始的关键字
listen 80; #用于指定虚拟主机的服务端口
server_name localhost; 用于指定ip地址或者域名,多个域名用空格隔开
location / {
root html;
index index.html index.htm; #用于设定访问的默认首页
}
error_page 500 502 503 504 /50x.html;# 静态页面重定向服务器错误
页面,例如携程的网站崩溃出现的页面
location = /50x.html {
root html;
}
}
}
㈤ centos中nginx怎么启动
Nginx的启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c参数指定配置文件路径。 Nginx的停止 Nginx支持以下几种信号控制: TERM, INT 快速关闭 QUIT 从容关闭 HUP 平滑重启 USR1 重新打开日志文件,在切割文件时用处大 USR2 平滑升级 WINCH 从容关闭工作进程 我们可以通过信号停止Nginx主进程,首先,我们需要通过ps-ef|grep命令获得master进程的PID,或者通过cat pid文件获得主进程号。
Nginx的启动
㈥ chkconfig无法识别nginx,如何设置nginx自启
假定你源码安装Nginx:
安装路径是/usr/local/nginx
否则变更下面路径的文件:
########################
nginx="/usr/local/nginx/sbin/nginx"
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
################################
则将下面文件:
#cd /etc/init.d/
#vi nginx
粘贴刚才的内容。检查是不是完整
#chmod +x nginx
#chkconfig add nginx
#chkconfig nginx on
在Centos下是这样。其他类同。
#!/bin/sh
#
#nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/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"
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
㈦ 怎样在centos上手动安装配置lnmp环境
在centos上手动安装配置lnmp环境的方法
一、安装所需的库文件和编译环境
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
二、安装PHP和MySQL
yum -y install php mysql mysql-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fastcgi
service mysqld start //启动mysql服务
chkconfig mysqld on //设置开机自动启动
三、安装nginx,由于CentOS没有默认的nginx软件包,需要启用REHL的附件
1. rpm -Uvh http://download.Fedora.RedHat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
2. yum -y install nginx
chkconfig nginx on //设置开机启动
service nginx start //启动ngin服务
四、安装spawn-fcgi来运行php-cgi //spawn-fcgi是用来调用php提供动态php格式的网页
yum install spawn-fcgi
五、下载spawn-fcgi 的启动脚本
1. wget http://bash.cyberciti.biz/dl/419.sh.zip //这是别人写好的脚本,直接拿来用
2. unzip 419.sh.zip
3. mv 419.sh /etc/init.d/php_cgi
4. chmod +x /etc/init.d/php_cgi
/etc/init.d/php_cgi start //启动php_cgi
1. netstat -tulpn | grep :9000 //查看进程,查看服务有没有正常启动,若出现如下代表一切正常
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4352/php-cgi
六、配置nginx
vim /etc/nginx/nginx.conf //下面就是修改nginx.conf配置文件
user nginx //修改ngin守护进程的用户
worker_processes 4; //工作进程数,一般与 CPU 核数等同,但实际的可以多一些
error_log logs/error.log; //错误日志位置
events {
worker_connections 2048;#每个工作进程允许最大的同时连接数,可以稍微大一些,1024的倍数
}
gzip on;
server {
listen 80;
server_name 192.168.175.208; //nginx服务器地址
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; //这里SCRIPT_FILENAME后面指定的是nginx的网站目录
include fastcgi_params;
}
把前面注释全部去掉,找到
location / {
root /html;
index index.php index.html index.htm;
}
修改为如上所示 主要是添加index 后面的index.php
七、编写脚本,测试nginx与php有没有结合
vim /usr/share/nginx/html/index.php
<?php
phpinfo
?>
最后通过浏览器访问服务器测试是否成功,出现php信息页面表示成功。
下面是我工作过程中遇到的一个问题。原来服务器上安装的有apache服务器。但是现在要把图片服务器换成nginx,图片服务器里面网页跳转的就不管用的。查找资料发现apache的rewrite规则需要转换成nginx识别的规则才行,通过下面的网页转换后,在nginx.conf中添加
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/ //先转换原来的.htpaccess
然后在nginx.conf 中的server里添加这行内容,指定你的htaccess所在的位置
include /var/www/html/webshop/web/.htaccess;
小刚SEO为你解答
㈧ linux 安装nginx后怎么启动
以Centos为例:
1、6.0以前的版本创建/etc/init.d/nginx启动脚本
/etc/init.d/nginx start即可启动
chkconfig nginx on设置开机自启动
2、7.0需要创建nginx.service放到/usr/lib/systemd/system
systemctl start nginx
systemctl enable nginx
㈨ Nginx,一看就会
Nginx("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:网络、京东、新浪、网易、腾讯、 淘宝等。
1.1 WEB 服务器
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php
等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50000个并发连接数。
1.2 反向代理
1.正向代理,代理客户端,客户端需要配置代理
2.反向代理,代理服务端,客户端无感知
1.3 负载均衡
Nginx 的异步框架可以处理很大的并发请求,把这些并发请求 hold 住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称 backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网 IP 地址,并且在业务量增加的时候可以方便地扩容后台服务器。
这时候集群的概念产生了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服器,也就是我们所说的负载均衡。
1.4 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
Nginx官网
2.1 相关安装包
pcre-8.37.tar.gz openssl-1.0.1t.tar.gz zlib-1.2.8.tar.gz nginx-1.11.1.tar.gz
2.2 安装流程
2.1.1.安装 pcre 解压缩 pcre-xx.tar.gz 包
进入解压缩目录,执行./configure
如果提示,需要提前安装 gcc++,进入安装光盘目录的软件包(/media/CentOSXX/Package)执行
rpm -ivh libstdc+ devel-4.4.7-17.el6.x86_64.rpm
rpm -ivh gcc-c+ 4.4.7-17.el6.x86_64.rpm
./configure 完成后,回到 pcre 目录下执行 make,再执行 make install
2.2.2.安装 openssl
解压缩 openssl-xx.tar.gz 包。
进入解压缩目录,执行./config
make && make install
2.2.3.安装 zlib 解压缩 zlib-xx.tar.gz 包。
进入解压缩目录,执行./configure。
make && make install
2.2.4.安装 nginx
解压缩 nginx-xx.tar.gz 包。
进入解压缩目录,执行./configure。
make && make install
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
2.3 Nginx 启动
命令
启动命令:在/usr/local/nginx/sbin 目录下执行 ./nginx
关闭命令: 在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop
重新加载命令: 在/usr/local/nginx/sbin 目录下执行 ./nginx -s reload·
设置 nginx 为自启动服务
修改 linux 启动脚本/etc/rc.d/rc
加入 :/usr/local/nginx/sbin/nginx
nginx 安装目录下,其默认的配置文件都放在conf 目录下,而主配置文件nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
案例配置如下:
location 指令说明
该指令用于匹配 URL,语法如下:
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
~:用于表示 uri 包含正则表达式,并且区分大小写。
~*:用于表示 uri 包含正则表达式,并且不区分大小写。
^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
案例配置如下:
在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务,而且 Nginx 提供了几种分配方式(策略):
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
weight
weight 代表权重,默认为 1,权重越高被分配的客户端越多指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离从目前实现角度来讲大致分为两种:
1.一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
2.另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。
master-workers 的机制的好处
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,
同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会
影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的
worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当
前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
需要设置多少个 worker
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进
程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话
下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu
数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
连接数 worker_connection
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections * worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *
worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
注意:此部分属于高级技术,近几日会将下面的知识点补充完毕。
8.1 Keepalived+Nginx 高可用集群(主从模式)
8.2 Keepalived+Nginx 高可用集群(双主模式)