我们项目之前我一直不会调整,看了如下的文章立马上升了一个档次
文章目录
一.1 yum安装
yum install nginx -y
一.2 二进制 安装
下载地址:http://nginx.org/en/download.html
- 下载完上传Linux服务器上,一般安装在/usr/local下,进行解压
tar -zxvf nginx-1.18.0.tar.gz
- 进行配置,在nginx根目录下执行
# 1.安装编译工具文件库
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 2.使用默认配置
./configur
# 3.然后回车,进行编译
make
# 4.然后回车,安装
make install
# 注意:如果自定义安装
# 1. 创建nginx临时目录
mkdir -p /var/temp/nginx
# 2. 进入nginx安装目录,指定配置文件
./configure \
--prefix=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/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 \
--with-http_stub_status_module \
--with-http_ssl_module
# --with-http_ssl_module 是配置支持https
# 3.编译、安装
make
make install
- 查找安装路径:
whereis nginx
# 默认在/usr/local/nginx
卸载Nginx:
# 关闭nginx进程
./nginx -s stop
rm -rf /user/local/nginx
make clean
二.常用命令
启动/停止/退出nginx:
# 启动
cd /usr/local/nginx/sbin/
./nginx
start nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 停止
./nginx -s stop
# 安全退出,优雅退出
./nginx -s quit
# 重新加载配置文件
./nginx -s reload
# 查看配置文件是否错误
./nginx -t
# 查看nginx进程
ps aux|grep nginx
设置nginx开机启动:
vim /etc/rc.local
然后在底部增加
/usr/local/nginx/sbin/nginx
其他命令:
# 开启防火墙
service firewalld start
# 关闭防火墙
service firewalld stop
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
三. 核心配置文件结构
配置文件默认是放在/usr/local/nginx/conf/nginx.conf,配置文件中默认有三大块:全局块、events块、http块。
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;
}
}
}
1. 全局块
work process指令:
nginx是进程模型,分为主进程、工作进程。
master_process:用来指定是否开启工作进程。
worker_processes:配置Nginx生成工作进程的数量,一般与CPU的内核数-1数保存一致。
# 设置工作进程
worker_processes 2;
2.events块
accept_mutex指令:
配置:accept_mutex on|off ;用来设置Nginx网络连接序列化。
worker_connections指令:
默认是 worker_commections 512;用来配置单个worker进程最大的连接数;
(单个worker进程最大的连接数 * N个worker线程),这个值不能大于操作系统支持打开的最大文件句柄数量。(Linux一般是65535)
# 修改操作系统支持打开的最大文件句柄数量,临时修改
ulimit -HSn 2048
# 永久修改
vi /etc/security/limits.conf
3.http块
include指令:
包含和导入外部文件,进行模块化的划分。
include mime.types;
default_type application/octet-stream;
sendfile指令:
启用文件的高效传输,打开有利于文件传输的性能。
sendfile on; # 启用高效传输,与tcp_nopush联合使用
tcp_nopush on; # 当请求累积一定大小的时候,在进行发送
keepalive_requests指令:
用来设置一个keep-alive连接使用的次数,客户端连接服务的超时时间。
gzip指令:
开启它有利于文件和请求数据的传输。
gzip on
3.server块:
用来设置虚拟主机服务名称。
server {
listen 80;
server_name www.xx1.cn www.xx2.cn;
# 可以配置多个,也可以通配符进行配置 *.itcast.cn www.itcast.* 注意*只能在首尾部分
}
location指令:(用来设置请求的URI。)
server {
...
server_name xxx.cn
# 可以在location后面加=(精确匹配)~(支持正则)~*(支持正则,支持大写)
location /abc{
default_type text/plain;
return 200 "access success";
}
}
error_page指令:(设置网站的错误页面。)
server {
error_page 404 http://www.404.cn;
}
或者
server{
error_page 404 /50x.html;
error_page 500 502 503 504 /50x.html;
location =/50x.html{
root html;
}
}
gzip_static指令:
# 1.查询当前Nginx的配置参数
nginx -V
# 2.清楚编译内容
cd /root/nginx/core/nginx-xxx
make clean
# 3.使用configure来配置参数
./configure (...之前的内容) --with-http_gzip_static_module
# 4.进行编译
make
# 5.将objs目录下的nginx二进制执行文件移动到nginx安装目录下的sbin下
mv objs/nginx /usr/local/nginx/sbin
# 6.执行更新命令
make upgrade
# 7.在配置文件http块下添加
gzip_static on
proxy块:(反向代理模块)
proxy_set_header指令: 可以更改Nginx服务器接收到的客户端请求的请求头信息,然后 将新的请求头发送给代理的服务器。
server {
listen 8080;
server_name localhost;
# 设置DNS的IP,用来解析proxy_pass域名
resolver 8.8.8.8;
location /server {
proxy_pass http://192.168.xx.xx:8080/;
proxy_set_header username TOM;
}
}
四. 配置文件案例:
# 全局块
# 配置允许运行Nginx工作进程的用户和用户组
user www;
# 一般是CPU核数-1
worker_processes 2;
# 配置Nginx服务器运行对错误日志存放的路径
error_log logs/error.log;
pid logs/nginx.pid;
# 全局块
events{
accept_mutex on;
multi_accept on;
# 设置Nginx的worker进程最大的连接数
worker_connections 1024;
}
# http块
http{
include mime.types;
default_type application/octet-stream;
# 配置允许使用sendfile方式运输,开启高效的文件传输
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 配置连接超时时间
keepalive_timeout 65;
# Gzip压缩功能配置
include /home/www/gzip/nginx_gzip.conf;
# 配置请求处理日志格式
log_format server1 '===>server1 access log';
# log_format server2 '===>server2 access log';
# server块 开始 #
include /home/www/conf.d/*.conf;
# server块 结束 #
}
server1的配置文件
server{
listen 8081;
# 设置虚拟主机服务名称,可以用域名,多个空格隔开,也可以通配符"*“例子:*.good.cn
server_name localhost;
# 配置请求处理日志存放路径
access_log /home/www/myweb/server1/logs/access.log server1;
location /server1/location1{
root /home/www/myweb;
index server1.html;
}
location /server1/location2{
root /home/www/myweb;
index server2.html;
}
# 配置错误页面转向
location = /404.html {
root /home/www/myweb;
index 404.html;
}
}
nginx_gzip.conf的配置文件
# 开启gzip功能
gzip on;
# 压缩源文件类型,例 application/javascript application/html;在mine.types里查看。
gzip_types *;
# 压缩级别 1-9
gzip_comp_level 6;
# 进行压缩响应页面的最小长度,小于这个数不进行压缩
gzip_min_length 1024k;
# 缓存空间大小,使用默认就好
gzip_buffers 4 16K;
# 指定压缩响应所需要的最低HTTP请求版,使用默认就好
gzip_http_version 1.1;
# 往头信息中添加压缩标识,默认是off
gzip_vary on;
# 对IE6以下的版本都不进行压缩
gzip_disable "MSIE [1-6]\.";
解决跨域问题:
location /xxx{
add_header ‘Access-Control-Allow-Origin’ *;
add_header ‘Access-Control-Allow-Credentials’ 'true';
add_header ‘Access-Control-Allow-Methods’ GET,POST,PUT,DELETE;
add_header ‘Access-Control-Allow-Headers’ *;
root /home/www/myweb;
index server1.html;
}
解决静态资源防盗链:
## 用valid_referers指令,如果在添加上域名或者IP地址,如果该值为1就返回403
location /xxx {
valid_referers none blocked www.baidu.* 127.0.0.1;
if ($invalid_referer){
# 返回403
return 403
# 如果让该图片显示其他默认图片
rewrite ^/ /images/图片名.png break;
}
root /usr/local/nginx/html;
}
# 如果不算这个域名,会重定向403
valid_referers *.goodysr.cn
if($invalid_referer){
return 403
}
Rewrite域名跳转:
访问xxx1、xxx2域名 会跳转到zong的域名下。
server {
listen 80;
server_name www.xxx1.com www.xxx2.cn;
rewrite ^(.*) http://www.zong.cn$1;
# 也可以某个路径下进行跳转
location /user {
rewrite ^/user(.*)$ http://www.user.cn$1;
}
}
五. 配置SSL:
下载证书。
server {
listen 80;
server_name 域名;
# 将http请求重定向https上
rewrite ^(.*)$ https://$host$1;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name 域名;
root html;
index index.html index.htm;
# 证书文件
ssl_certificate cert/xxx.pem;
ssl_certificate_key cert/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# 加密规则
ssl_ciphers HIGH:!aNULL:!MD5;
# 表示使用TLS协议类型
ssl_protocols TLSv1 TLSv1.1 TLSv1.2
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
六. 配置负载均衡:
down 不参与负载均衡
backup 备份服务器,不执行,当主服务挂的时候才执行
max_fails 允许请求失败的次数,max_fails =3
fail_timeout 经过max_fails失败后,服务暂停时间,fail_timeout=15
max_conns 限制最大的接收连接数,当这台机器最大并发是100,也就是值为100
负载均衡策略有3个:
1.轮询 默认方式
2.weight 权重方式
3.ip_hash 根据ip分配方式 ,这样可以解决session不共享问题
upstream backend{
ip_hash;
server 127.0.0.1:9091;
server 127.0.0.1:9092;
}
# 负载均衡配置
upstream backend {
server 127.0.0.1:9091 down;
server 127.0.0.1:9092 max_conns=100 weight=1;
server 127.0.0.1:9093 weight=2;
}
upstream backend2{
hash &request_uri;
server 127.0.0.1:9091;
server 127.0.0.1:9091;
}
server {
listen 80;
server_name localhost;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://backend;
}
location /backend2/ {
proxy_pass http://backend2;
}
}
七. 配置缓存:
http{
# 设置缓存根目录 levels缓存规则 keys_zone缓存名,缓存大小,1m=8000连接地址
# inactive缓存多久会被情况 max_size缓存空间最大空间
proxy_cache_path /usr/local/cache levels=2:1 keys_zone=缓存名:200m inactive=1d max_size=20g;
upstream backend{
server 192.168.200.146:8080;
}
server {
listen 8080;
server_name localhost;
location / {
# 设置不缓存 如果是js文件不进行缓存
if ($request_uri ~ /.*\.js$){
set $nocache 1;
}
proxy_no_cache $nocache $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $nocache $cookie_nocache $arg_nocache $arg_comment;
proxy_cache 缓存名;
proxy_cache_key $scheme$proxy_host$request_uri;
# 当请求为5次才进行缓存
proxy_cache_min_uses 5;
# 当缓存状态码是200 ,缓存时长5天
proxy_cache_valid 200 5d;
# 当缓存状态码是404,缓存时长30s
proxy_cache_valid 404 30s;
proxy_cache_valid any 1m;
add_header nginx-cache"$upstream_cache_status";
proxy_pass http://backend;
}
}
}
删除对应的缓存目录:
rm -rf /usr/local/proxy_cache/......
八. 动静分离:
upstream webservice{
# tomcat地址
server 192.168.10.xxx:8080;
}
server {
listen 80;
server_name localhost;
# 动态资源
location /demo {
proxy_pass http://webservice;
}
# 静态资源
location ~/.*\.(png|jpg|gif|js){
root html/web; # 静态文件地址
gzip on;
}
location / {
root html/web;
index index.html index.htm;
}
}
九.搭建高可用Nginx集群:
准备两台Nginx机器,需要在这两台机器安装Keepalived,通过 VRRP 协议实现高可 用功能。
安装Keepalived
步骤1:从官方网站下载keepalived,官网地址 https://keepalived.org/
步骤2:将下载的资源上传到服务器
keepalived-2.0.20.tar.gz
步骤3:创建keepalived目录
mkdir keepalived
步骤4:将压缩文件进行解压缩,解压缩到指定的目录
tar -zxf keepalived-2.0.20.tar.gz -C keepalived/
步骤5:对keepalived进行配置,编译和安装
cd keepalived/keepalived-2.0.20
./configure --sysconf=/etc --prefix=/usr/local
make && make install
修改配置文件,一般在 /etc/keepalived/keepalived.conf ,我们进行配置
global_defs {
# 当keepalived发送切换时需要发email给具体的邮箱地址
notification_email {
xx1@xx1.com
xx2@xx2.com
}
# 设置发件人的邮箱信息
notification_email_from yy@xx3.com
# 指定smpt邮箱服务地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 服务器的一个标识 A机器
router_id keepalivedA
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
# 两个值可选 MASTER主机 BACKUP从机
state MASTER
# 非抢占,这个参数只能用于state为backup
# 所以我们把state都设置成backup 让其通过priority来竞争,实现主机和从机
nopreempt
interface ens33
virtual_router_id 51
# 优先级高的将成为主机
priority 100
advert_int 1
authentication {
# 认证方式
auth_type PASS
# 指定认证使用的密码,最多8位
auth_pass 1111
}
virtual_ipaddress {
# 虚拟IP地址设置虚拟IP地址
192.168.200.222
}
}
启用keepalived
cd /usr/local/sbin
./keepalived
编写脚本实现自动切换
在keepalived配置文件中添加对应的配置像
gloval_defs{
....
}
# ck_n为脚本名称
vrrp_script ck_n{
script "脚本位置"
interval 3 #执行时间间隔
weight -20 #动态调整vrrp_instance的优先级
}
vrrp_instance VI_1 {
...
virtual_ipaddress {
192.168.200.111
}
# 使用Shell脚本
track_script {
ck_n
}
}
编写脚本,内容:监听nginx运行状态,如果nginx启动失败,尝试再次启动,如果启动失败,关掉keepalived进程。
#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
killall keepalived
fi
fi
为脚本文件设置权限
chmod 755 ck_nginx.sh
常见问题
启动失败找不到pid文件
mkdir -p /var/run/nginx/
# 指定配置文件进行重启
nginx -C /usr/local/nginx/conf/nginx.conf
# 重启
nginx -s reload
配置环境变量:
vim /etc/profile
# 在文件末尾加上
export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH
设置开机自动启动:
vim /lib/systemd/system/nginx.service
# 在文件添加
[Unit]
#描述服务
Description=nginx
#描述服务类别
After=network.target
#服务运行参数的设置,注意【Service】的启动、重启、停止命令都要用绝对路径
[Service]
#后台运行的形式
Type=forking
#服务具体运行的命令
ExecStart=/usr/local/nginx/sbin/nginx
#重启命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#停止命令
ExecStop=/usr/local/nginx/sbin/nginx -s quit
#表示给服务分配独立的临时空间
PrivateTmp=true
#运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
[Install]
WantedBy=multi-user.target
# 然后 修改文件权限
chmod 755 /usr/lib/systemd/system/nginx.service
# 设置开机自启动
systemctl enable nginx.service
未完待续…