1 检查gcc编译器
检查所在linux有没有gcc编译器,若没有执行如下命令:
yum install -y gcc-c++
用于后边的文件编译
2 安装包及依赖下载
服务器有网情况:
Nginx安装包:wget http://nginx.org/download/nginx-1.12.2.tar.gz;
依赖包:pcre,zlib,openssl
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
wget http://www.zlib.net/fossils/zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
服务器无网情况:
在本地电脑分别打开以下网站下载对应稳定的安装包
https://ftp.pcre.org/pub/pcre/
https://www.openssl.org/source/
上传到服务器进行解压
tar –zxvf nginx-1.12.2.tar.gz tar –zxvf pcre-8.41.tar.gz
tar –zxvf zlib-1.2.11.tar.gz tar –zxvf openssl-1.1.0g.tar.gz
3 编译安装
1) 安装pcre库
cd pcre-8.41进入解压的目录
[root@nginx01 pcre-8.41]# ./configure [root@nginx01 pcre-8.41]# make [root@nginx01 pcre-8.41]# make install |
2) 安装zlib库
cd zlib-1.2.11进入解压的目录
[root@nginx01 zlib-1.2.11]# ./configure [root@nginx01 zlib-1.2.11]# make [root@nginx01 zlib-1.2.11]# make install |
3) 安装openssl库
cd openssl-1.1.0g进入解压的目录
[root@nginx01 openssl-1.1.0g]# ./config [root@nginx01 openssl-1.1.0g]# make [root@nginx01 openssl-1.1.0g]# make install |
4) 安装nginx
cd nginx-1.12.2进入解压的目录,--prefix参数可省略
[root@nginx01 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module [root@nginx01 nginx-1.12.2]# make [root@nginx01 nginx-1.12.2]# make install |
注意:确保以上每一步命令的执行没有报错才能进行下一步操作
4 启动与停止
启动nginx:/usr/local/nginx/sbin/nginx
停止nginx:/usr/local/nginx/sbin/nginx -s stop
重新加载配置:/usr/local/nginx/sbin/nginx -s reload
5 反向代理及负载配置
负载均衡大致有五种模式:
1) 轮询模式(roundrobin):轮询方式,默认的负载均衡方式。依次将请求分配到各个后台服务器中,适用于后台机器性能一致的情况。挂掉的机器可以自动从服务列表中剔除。
2) 权重模式(weight):指定权重,weight和访问比率成正比,用于后端服务器性能不均的情况。
3) Ip哈希算法(ip_hash):如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。
4) url哈希算法(url_hash-第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效
5) 响应时间(fair-第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配
通过修改nginx配置文件nginx.conf,如下:
#user nobody;
worker_processes 1;#工作进程,依据CPU核数而定
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #error日志路径
pid logs/nginx.pid; #pid路径
events {
worker_connections 1024;#单个worker_processes能承受的最大并发链接数
}
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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;#是否开启gzip压缩
server_tokens off;#隐藏nginx版本
#负载均衡,内网服务器
upstream mycluster {
server 192.168.100.71:8080 weight=3;
server 192.168.100.72:8080 weight=4;
server 192.168.100.73:8080 weight=3;
#ip_hash;
}
#http server方式
server {
listen 80;
server_name abc.com;
#charset koi8-r;
access_log logs/host.access.log main;
location / {
#代理内网服务器,mycluster名字要和upstream后面的mycluster名字一样
proxy_pass http://mycluster;
proxy_set_header Host $host;#客户端的主机名
proxy_set_header X-Real-IP $remote_addr; #web服务器端获得用户的真实ip
# 转发客户端真实ip,特别是多nginx代理
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
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;
}
}
#https证书加密配置,同时支持http,https访问,监听80,443端口
server {
listen 80;
listen 443 ssl;
server_name abc.com;
ssl_certificate /usr/local/nginx/cert/214110615420891.pem; #证书路径
ssl_certificate_key /usr/local/nginx/cert/214110615420891.key; #证书key路径
#服务器所支持的密码格式,命令:openssl ciphers可以查看服务器支持的密码格式
ssl_ciphers ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #默认是此,可省略此项
#优先使用服务端的加密套件,而非客户端浏览器的加密套件,默认off,可以省略此项
ssl_prefer_server_ciphers on;
#access_log logs/host.access.log main;#日志路径
location / {
proxy_pass http://mycluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http:// $scheme://;#当http协议访问时自动转换成HTTPS协议
if ( $server_port = 80 ){ #http访问,重写为https路径访问
rewrite ^(.*) https://$server_name$1 permanent;
}
}
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;
}
}
}