龙空技术网

Nginx的安装以及反向代理和负载均衡

IT民工10101000 409

前言:

此刻各位老铁们对“nginxexpires3d”大体比较关切,咱们都想要分析一些“nginxexpires3d”的相关资讯。那么小编也在网摘上收集了一些对于“nginxexpires3d””的相关知识,希望同学们能喜欢,小伙伴们一起来了解一下吧!

Nginx的代理功能与负载均衡功能是最常被用到的,这里就开门见山,直接上安装步骤。



一、安装

1、安装依赖包

yum install gcc-c++ -y --nogpgcheck

yum install pcre pcre-devel -y --nogpgcheck

yum install zlib zlib-devel -y --nogpgcheck

yum install openssl openssl--devel -y --nogpgcheck


2、下载nginx

wget


3、解压缩,编译安装

tar -zvxf nginx-1.12.2.tar.gz

./configure --prefix=/opt/nginx --with-http_stub_status_module --without-poll_module --without-select_module --with-http_ssl_module --with-http_realip_module --with-http_perl_module --with-pcre-jit --error-log-path=/opt/nginx/logs/error.log --http-log-path=/opt/nginx/logs/access.log --with-http_stub_status_module

make && make instal


4、默认安装路径

/usr/local/nginx


5、配置systemctl

编辑文件 vim /lib/systemd/system/nginx.service添加下面内容

[Unit]

Description=nginx

After=network.target

/opt/nginx/sbin

[Service]

Type=forking

ExecStart=/opt/nginx/sbin/nginx

ExecReload=/opt/nginx/sbin/nginx -s reload

ExecStop=/opt/nginx/sbin/nginx -s quit

PrivateTmp=true


[Install]

WantedBy=multi-user.target


说明:

[Unit]:服务的说明

Description:描述服务

After:描述服务类别

[Service]服务运行参数的设置

Type=forking是后台运行的形式

ExecStart为服务的具体运行命令

ExecReload为重启命令

ExecStop为停止命令

PrivateTmp=True表示给服务分配独立的临时空间

注意:[Service]的启动、重启、停止命令全部要求使用绝对路径

[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3


6、使用systemctl配置开机启动和查看状态

[root@localhost sbin]# systemctl enable nginx

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.


[root@localhost sbin]# systemctl status nginx

● nginx.service - nginx

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

Active: active (running) since Wed 2018-08-08 08:27:56 CST; 3min 22s ago

Main PID: 10216 (nginx)

CGroup: /system.slice/nginx.service

├─10216 nginx: master process /usr/local/nginx/sbin/nginx

└─10217 nginx: worker process


Aug 08 08:27:56 localhost.localdomain systemd[1]: Starting nginx...

Aug 08 08:27:56 localhost.localdomain systemd[1]: Started nginx.

[root@localhost sbin]#


二、反向代理实现负载均衡

1、编辑配置文件/usr/local/nginx/conf/nginx.conf

#全局配置部分

#user是运行的用户和组

#user nobody;

#nginx进程数,建议设置为等于cpu总核心数

worker_processes auto;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

error_log /var/log/nginx/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid进程文件

pid /var/run/nginx.pid;

#指定进程可以打开的最大描述符:数目

#工作模式与连接数上限

#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

#现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。

#这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。

worker_rlimit_nofile 65535;


#工作模式配置

events {

#开启accept_mutex避免惊群的出现,如果关闭后,当请求进来会激活睡眠的进程,造成服务器负载变高,相关链接:

accept_mutex on;

#打开同时接受多个新网络连接请求的功能。

multi_accept on;

#单个进程最大连接数(最大连接数=连接数*进程数)

worker_connections 1024;

#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型

#是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。

#补充说明:

#与apache相类,nginx针对不同的操作系统,有不同的事件模型

#A)标准事件模型

#Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll

#B)高效事件模型

#Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。

#Epoll:使用于Linux内核2.6版本及以后的系统。

#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

#Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。

use epoll;

}


#http配置

http {

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 /var/log/nginx/access.log main;

#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

#注意:如果图片显示不正常把这个改成off。

#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。

sendfile on;

#此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用

tcp_nopush on;


#长连接超时时间,单位是秒

keepalive_timeout 65;

#gzip模块设置

# gzip on; 开启gzip压缩输出

#gzip_min_length 1k; 最小压缩文件大小

#gzip_buffers 4 16k; 压缩缓冲区

#gzip_http_version 1.0; 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

#gzip_comp_level 2; 压缩等级

#gzip_types text/plain application/x-javascript text/css application/xml; 压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

#gzip_vary on;

gzip on;

#引入配置文件,一个配置文件可以是一个虚拟主机。默认,虚拟机主机配置文件在这个文件中配置

#include /etc/nginx/conf.d/*.conf;

#负载均衡配置

upstream zhjd.djg.com{

# ip_hash;

#服务器列表,可以是IP或者域名

server zhjd.djg.com:443 weight=5;

# server 10.100.60.253:80 weight=5;

}


#虚拟主机的配置

server {

#监听端口

listen 80;

listen 443;

#域名可以有多个,用空格隔开

server_name zhjd.djg.com;

#ssl配置:

# ssl on;

# ssl_certificate /opt/nginx/bundle.crt;

# ssl_certificate_key /opt/nginx/cert.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;

#网页的默认编码

#charset koi8-r;

#定义本虚拟主机的访问日志

#access_log logs/host.access.log main;


#对"/"启用反向代理

location / {

# root html;

# index index.html index.htm;

# proxy_pass ;

proxy_pass ;

}


#error_page 404 /404.html;


# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}


# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

# proxy_pass ;

#}


# 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;

#}


# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}


# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;


# location / {

# root html;

# index index.html index.htm;

# }

#}


# 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;

# }

#}


}


三、实现一个nginx代理多个网站,并实现负载均衡

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理的实现

1)需要有一个负载均衡设备来分发用户请求,将用户请求分发到空闲的服务器上

2)服务器返回自己的服务到负载均衡设备

3)负载均衡将服务器的服务返回用户


1、编辑conf配置文件,只保留全局配置,并通过引入其他配置文件的方式配置虚拟主机和反向代理

#user nobody;

worker_processes 1;


#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

error_log /var/log/nginx/error.log;

#pid logs/nginx.pid;

pid /var/run/nginx.pid;


events {

accept_mutex on;

multi_accept on;

worker_connections 1024;

}


http {

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 logs/access.log main;

access_log logs/access.log main;

sendfile on;

#tcp_nopush on;


#keepalive_timeout 0;

keepalive_timeout 65;

include /usr/local/nginx/www/*.conf; #引入其他配置文件

}


2、编辑第一个虚拟主机配置文件

upstream yum.com{

#负载服务器可以写多个

server 10.100.60.253:80;

}


server {

listen 80;

server_name yum.com;


location / {

proxy_pass ;

}


error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

3、编辑第二个虚拟主机配置文件

upstream zhjd.djg.com{

server zhjd.djg.com:443 weight=5;

}

server {

listen 80;

listen 443;

server_name zhjd.djg.com;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;

location / {

proxy_pass ;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

同时监听了80和443


4、本地测试

修改host将yum.com和zhjd.djg.com这两个域名指向nginx服务器


四、动静分离

将静态资源交给Nginx处理,将动态资源交给tomcat处理,实现动静分离.实际上,何谓动?何谓静呢?那我们java来说jsp、servlet等就是动,因为其离开我们的tomcat服务器的支持就会无法正常工作。而js、css等文件就是静了。因为离开tomcat他一样能正常工作。好了废话少说直接上配置。

server {

listen 80;

server_name 10.100.60.253;

#处理动态资源

location / {

proxy_pass ;

}


#处理静态资源

#静态资源扩展名为html|htm|gif|jpg|jpeg|bmp|png|ico|js|css

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {

root /usr/share/nginx/html;

#cache

expires 3d;

}

标签: #nginxexpires3d