Nginx配置
1、安装nginx
1.1 Centos7安装
1、如果下列依赖有,则不需要安装
查看gcc是否安装:
yum list installed | grep gcc
查看openssl库是否安装:
yum list installed | grep openssl
查看pcre库是否安装:
yum list installed | grep pcre
查看zlib库是否安装:
yum list installed | grep zlib
一键安装所有依赖
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
2、配置
进入nginx目录
./configure \
--prefix=/usr/local/nginx \
--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/neinx/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
–prefix:安装目录
3、编译&安装
make
make install
4、创建目录
mkdir /var/temp/nginx/client -p
5、运行
进入/usr/local/nginx/sbin
./nginx #启动
./nginx -s stop #非正常退出(不推荐使用)
./nginx -s reload #重新加载配置文件
./nginx -s quit #正常退出
1.2 使用docker安装
1、拉取镜像
docker pull nginx
2、创建目录
# 在/root⽬录下创建nginx⽬录⽤于存储nginx配置
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf⽂件
vim nginx.conf
粘贴以下内容
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
}
include:表示包含conf.d目录下的以conf为后缀名的配置文件。相当于这个是主配置文件,conf.d下的是子配置文件。
3、创建子配置文件
vim ~/nginx/conf.d/80.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4、运行容器
docker run -id --name=nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
-p:将容器的80端口映射到宿主机的80端口
-v:目录挂载
-v $PWD/logs:/var/log/nginx:将当前目录下的logs目录挂载到容器的/var/log/nginx目录
2、反向代理与负载均衡(基于docker容器)
1、反向代理
1、创建配置文件
vim ~/nginx/conf.d/proxy.conf
upstream tomcat-aaa{
server 127.0.0.1:8080;
}
server {
listen 80; # 监听的端⼝
server_name www.aaa.com; # 域名或ip
location / { # 访问路径配置
# root index;# 根⽬录
proxy_pass http://tomcat-aaa;
index index.html index.htm; # 默认⾸⻚
}
}
2、加载配置文件
docker restart nginx
3、拉取tomcat
docker pull tomcat:8
4、创建挂载目录
mkdir ~/tomcat
cd ~/tomcat
5、运行tomcat
docker run -id --name=tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
-v $PWD:/usr/local/tomcat/webapps:当前目录挂载到容器中/usr/local/tomcat/webapps目录
6、修改本机的hosts文件(C:\Windows\System32\drivers\etc)
127.0.0.1 www.aaa.com
7、创建测试文件
mkdir ROOT
cd ROOT
vim index.html
index.html输入helolo docker nginx
访问:http://www.aaa.com
2、负载均衡
nginx常用负载均衡策略:
1、轮询(默认):会将请求平均分配到每一个服务器【会造成Session丢失】
upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
2、权重:每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况【会造成Session丢失】
upstream backserver { #相当于7条请求中有5条分配给8080,有2条分配给9090
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:9090 weight=2;
}
3、ip_hash:ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:hash(“124.207.55.82”) % 2 = 0, 1
upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
4、最少连接:web请求会被转发到连接数最少的服务器上【会造成Session丢失】
upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
测试:
1、进入conf.d
cd ~/nginx/conf.d
2、创建负载均衡配置文件
vim lb.conf
粘贴以下内容
upstream tomcat-hk{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server {
listen 80;
server_name www.hk.com;
location / {
# root index;
proxy_pass http://tomcat-hk;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
3、加载配置文件
docker restart nginx
4、创建3个tomcat目录
mkdir ~/tomcat-lb
cd ~/tomcat-lb
mkdir tomcat-8081
mkdir tomcat-8082
mkdir tomcat-8083
分别进入3个目录,创建ROOT目录,分别在ROOT下新建index.html文件,分别输入:tomcat-8081、tomcat-8082、tomcat-8083
5、创建tomcat容器
cd ~/tomcat-lb
docker run -id --name=tomcat-8081 -p 8081:8080 -v $PWD/tomcat-8081:/usr/local/tomcat/webapps tomcat:8
docker run -id --name=tomcat-8082 -p 8082:8080 -v $PWD/tomcat-8082:/usr/local/tomcat/webapps tomcat:8
docker run -id --name=tomcat-8083 -p 8083:8080 -v $PWD/tomcat-8083:/usr/local/tomcat/webapps tomcat:8
6、修改hosts文件(C:\Windows\System32\drivers\etc)
127.0.0.1 www.hk.com
7、访问
http://www.hk.com
一直会在三个tomcat之间轮流切换。其余两个图就不放了。
3、跨域配置
跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。
协议不同、端口不同、域名不同。满足这三种中的任何一种都会跨域
1、局部跨域
在虚拟主机的location配置:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Credentials true;
add_header Access-Control-Methods GET;
}
2、全局跨域
在虚拟主机中配置:
server {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Credentials true;
add_header Access-Control-Methods GET;
....
}
add_header Access-Control-Allow-Origin *:允许跨域访问的外域地址
add_header Access-Control-Credentials true:允许客户端携带证书访问
add_header Access-Control-Methods GET:允许客户端跨域访问的方法
4、nginx配置文件详情
#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
user nobody;
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量,最好为6,机器通常是8核
worker_processes 1;
#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid; #配置进程pid文件,记录服务启动时的进程id
#配置工作模式和连接数
events {
worker_connections 1024; #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections,上限为65535
}
#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
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日志及存放路径,并使用上面定义的main日志格式,main指的是#log_format里定义的main,只要访问nginx中的http都会记录
#access_log logs/access.log main;
sendfile on; #开启高效文件传输模式
#tcp_nopush on; #防止网络阻塞,上线以后要开
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位是秒
#gzip on; #开启gzip压缩输出,上线以后要开
#配置反向代理
upstream www.myweb.com{
server 192.168.211.131:8081;
server 192.168.211.131:8082;
}
#配置虚拟主机
server {
listen 80; #配置监听端口
server_name localhost; #配置服务名【域名】
#charset koi8-r; #配置字符集,默认utf8
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志,只有访问这个虚拟主机才会记录
#任何请求都会被该location匹配到并进行处理
location / {
#root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
root html;
#配置首页文件的名称
index index.html index.htm;
}
location /myweb {
#表示访问192.168.211.131/myweb时就会代理到upstream中
proxy_pass http://www.myweb.com;
}
location /sdf {
#表示访问192.168.211.131/sdf时就直接去/usr/local/nginx/static02目录下找
alias /usr/local/nginx/static02;
index login.html;
}
#error_page 404 /404.html; #配置404页面
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html; #配置50x错误页面
#精确匹配
location = /50x.html {
root html;
}
#PHP 脚本请求全部转发到Apache处理
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#PHP 脚本请求全部转发到FastCGI处理
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
#禁止访问 .htaccess 文件
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
#配置https服务,安全的网络传输协议,加密传输,端口443,运维来配置
#
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}