1.Nginx的安装
1.1运行以下脚本安装
yum install yum-utils -y
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 查看所有可安装nginx版本
yum --showduplicates list available nginx
yum install nginx-1.24.0 -y
systemctl enable nginx
# 防火墙开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# reload防火墙
firewall-cmd --reload
# 查看当前开了哪些端口
firewall-cmd --list-all
# 启动nginx
systemctl start nginx
# 查看是否开机启动
systemctl is-enabled nginx
默认需要开启80端口,访问服务器IP,看到Nginx欢迎界面,就说明安装成功了
1.2yum安装的各常用文件位置如下:
- nginx的配置文件在/etc/nginx/nginx.conf
- 自定义的配置文件放在/etc/nginx/conf.d
- 项目文件存放在/usr/share/nginx/html/
- 日志文件存放在/var/log/nginx/
1.3Nginx常用命令
nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen 重新打开日志文件。
nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t 不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v 显示 nginx 的版本。
nginx -V 显示 nginx 的版本,编译器版本和配置参数。
2.Nginx配置参数详解
nginx默认的配置文件在/etc/nginx/nginx.conf
2.1全局块
user nginx; # 用户
worker_processes auto; # 并发数
error_log /var/log/nginx/error.log notice; # 错误日志存放位置
pid /var/run/nginx.pid; # 进程存放目录
2.2events块
最大连接数就是worker_processes和connections的乘积
events {
worker_connections 1024; # 最大连接数
}
2.3http块
http块是最常使用的块,基本上所有的相关配置都是在http块中设置
-
全局块
http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; # include /etc/nginx/conf.d/*.conf; 导入配置,导入conf.d中的所有server配置 }
-
server块
在比较新的版本的nginx中,修改server配置一般在/etc/nginx/conf.d/中,不太修改主默认配置文件。
server { listen 80; server_name localhost; location / { proxy_pass http://backend; } }
3.具体配置示例
3.1虚拟主机
也就是在一台主机中模拟出两个虚拟主机,根据域名不同,可以转发到不同的服务,例如
[root@node7 conf.d]# vim /etc/nginx/conf.d/a.conf
server {
listen 80;
server_name www.kayotin.com;
location / {
root /mnt;
autoindex on;
}
}
server {
listen 80;
server_name www.hanayo.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
配置完成后重启nginx,并且在host中添加一条记录
192.168.32.17 www.kayotin.com www.hanayo.com
然后用浏览器访问,就可以看到结果。虽然访问的同一台服务器,但是转发到了2个不同的虚拟主机上
3.2访问日志
默认的日志在/var/log/nginx/access.log,nginx默认以如下格式记录访问日志。当然了,日志的格式我们也可以自定义,所以nginx可以用来记录访问日志。
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 /var/log/nginx/access.log main;
3.2location设置
所谓location设置,也就是根据域名/后面加的具体路径,转发到具体服务上。以下例子将www.hanayo.com/my转发到192.168.32.16。
[root@node7 conf.d]# vim /etc/nginx/conf.d/b.conf
server {
listen 80;
server_name www.hanayo.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /my {
proxy_pass http://192.168.32.16/;
}
}
这台服务器上安装了httpd服务,运行了示例页面。
vim /var/www/html/index.html
hello,这里是192.168.32.16
此时进行访问,就得到如下结果
3.3负载均衡设置
简单来说负载均衡设置就是把来自客户端的请求,分别转发到指定的多台服务上,以此来缓解服务器的压力。
[root@node7 conf.d]# vim /etc/nginx/conf.d/c.conf
upstream rss{
server 192.168.32.16;
server 192.168.32.18;
}
server {
listen 80;
server_name www.hanayo.com;
location / {
root /mnt;
autoindex on;
}
location /toms {
proxy_pass http://rss/;
}
在这个例子中,我们将的请求,均衡转发到16和18这两天服务器上,18上同样用httpd运行了一个简单的静态页面
vim /var/www/html/index.html
hello,这里是192.168.32.18
接下来我们访问http://www.hanayo.com/toms,就会发现会依次访问16和18,这样就实现了负载均衡。
3.4session共享
在访问网页时,本地会存储一些cookie。当使用负载均衡时,访问的服务器可能并不是同一台,这时候就产生了session共享的问题。
此步骤需要安装java环境,版本如下
https://repo.huaweicloud.com/java/jdk/7u80-b15/
jdk-7u80-linux-x64.rpm
java安装过程:
rpm -ivh jdk-7u80-linux-x64.rpm
find / -name '*java*'
# 可以看到默认安装在/usr/java/jdk1.7.0_80/
# 在 /etc/profile 文件中添加 JAVA_HOME 和 PATH 环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.7.0_80' >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
# 使环境变量生效
source /etc/profile
# 以下用来验证安装
[root@node8 ~]# jps
10874 Jps
Tomcat7.0.69
tar -xzf apache-tomcat-7.0.69.tar.gz -C /opt/tomcat/ --strip-components 1
安装后修改jsp文件
vim /opt/tomcat/webapps/ROOT/index.jsp
------------可以用dG快捷键,全删除,改成下面这样
from 192.168.32.16 session=<%=session.getId()%>
以上配置需要在16和18上都进行。配置完后,可以使用/opt/tomcat/bin/start.sh进行启动。
启动后我们直接访问16或者18的8080端口,可以看到sessionID
然后回到17上,将nginx配置修改为
upstream rss{
server 192.168.32.16:8080;
server 192.168.32.18:8080;
}
server {
listen 80;
server_name www.hanayo.com;
location / {
root /mnt;
autoindex on;
}
location /toms {
proxy_pass http://rss/;
}
此时访问http://www.hanayo.com/toms 就可以看到每次的sessionID不一样。
# 如果出现502,可能是SElinux权限没开,运行以下语句即可
setsebool -P httpd_can_network_connect 1
我们需要在nginx(在本例是17)上安装memecache
yum install libevent -y
yum install memcached -y
# 当前nginx服务器ip
memcached -d -m 128m -p 11211 -l 192.168.32.17 -u root -P /opt/mempid
pgrep memcached
拷贝jar包到tomcat的lib目录下,文件可以在我的仓库下载:
然后在/tomcat/conf/context.xml添加如下配置
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.32.17:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
然后重启tomacat
./shutdown.sh && ./startup.sh
此时再访问http://www.hanayo.com/toms,就可以看到每次的sessionID都是一样的了。