Nginx配置

1、安装nginx

1.1 Centos7安装

1、如果下列依赖有,则不需要安装

查看gcc是否安装:

yum list installed | grep gcc

查看openssl库是否安装:

yum list installed | grep pcre

查看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为后缀名的配置文件。相当于这:nf.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、运行容器(在nginx目录下)

docker run -id --name=nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-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目录

5.测试

#进入html目录
#创建html文件
vim index.html

nginx 查看PV uv nginx 查看是否安装了zll_nginx 查看PV uv

2、端口和域名绑定

端口绑定

(1)上传静态⽹站:

将/资料/静态⻚⾯/index⽬录上传⾄ /usr/local/nginx/index下

将/资料/静态⻚⾯/regist⽬录上传⾄ /usr/local/nginx/regist下

(2)修改Nginx 的配置⽂件:~/nginx/config.d/port.conf

server {
 listen 81;
 server_name localhost;
 location / {
    root /usr/share/nginx/index;
    index index.html index.htm;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
    root html;
 }
}

server {
 listen 82;
 server_name localhost;
 location / {
    root /usr/share/nginx/regist;
    index regist.html regist.htm;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
    root html;
 }
}

(3)访问测试:

地址栏输⼊http://192.168.216.128/:81 可以看到⾸⻚⾯

nginx 查看PV uv nginx 查看是否安装了zll_运维_02

地址栏输⼊http://192.168.216.128/:82 可以看到注册⻚⾯

nginx 查看PV uv nginx 查看是否安装了zll_运维_03

域名绑定

⼀个域名对应⼀个 ip 地址,⼀个 ip 地址可以被多个域名绑定。

本地测试可以修改 hosts ⽂件(C:\Windows\System32\drivers\etc)

可以配置域名和 ip 的映射关系,如果 hosts ⽂件中配置了域名和 ip 的对应关系,不需要⾛dns 服务

器。

nginx 查看PV uv nginx 查看是否安装了zll_运维_04

做好域名指向后,修改nginx配置⽂件 domain.conf

server {
 listen 80;
 server_name www.sunzihan.com;
 location / {
 root /usr/share/nginx/cart;
 index cart.html;
 }
 }
 server {
 listen 80;
 server_name regist.sunzihan.com;
 location / {
 root /usr/share/nginx/search;
 index search.html;
 }
 }

测试:

访问www.sunzihan.com

nginx 查看PV uv nginx 查看是否安装了zll_nginx_05

访问regist.sunzihan.com

nginx 查看PV uv nginx 查看是否安装了zll_nginx 查看PV uv_06

3、反向代理与负载均衡(基于docker容器)

1、反向代理

1、创建配置文件

vim ~/nginx/conf.d/proxy.conf

upstream tomcat-aaa{
 server 192.168.216.128: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)

192.168.216.128 www.aaa.com

7、创建测试文件

mkdir ROOT
cd ROOT
vim index.html

index.html输入helolo docker nginx port=8080

访问:http://www.aaa.com

nginx 查看PV uv nginx 查看是否安装了zll_nginx_07

2、负载均衡

nginx常用负载均衡策略:

1、轮询(默认):会将请求平均分配到每一个服务器【会造成Session丢失】

upstream backserver { 
	server 192.168.216.128:8080; 
	server 192.168.216.128:9090; 
}

2、权重:每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况【会造成Session丢失】

upstream backserver {  #相当于7条请求中有5条分配给8080,有2条分配给9090
	server  192.168.216.128:8080 weight=5; 
	server  192.168.216.128: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 192.168.216.128:8080; 
	server 192.168.216.128:9090; 
}

4、最少连接:web请求会被转发到连接数最少的服务器上【会造成Session丢失】

upstream backserver { 
	least_conn;
	server 192.168.216.128:8080; 
	server 192.168.216.128:9090; 
}

测试:

1、进入conf.d

cd ~/nginx/conf.d

2、创建负载均衡配置文件

vim lb.conf

粘贴以下内容

upstream tomcat-hk{
  server 192.168.216.128:8081;
  server 192.168.216.128:8082;
  server 192.168.216.128: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)

192.168.216.128 www.aaa.com

7、访问

http://www.aaa.com

nginx 查看PV uv nginx 查看是否安装了zll_html_08

一直会在三个tomcat之间轮流切换。其余两个图就不放了。

4、跨域配置

跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对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:允许客户端跨域访问的方法

3、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;
    #    }
    #}
}