架构图参考如下:
1.下载nginx
2.解压nginx压缩包.tar.gz
解压后得到文件夹
进入解压目录查看
3.安装gcc
[root@localhost nginx-1.10.3]# yum -y install gcc-c++
安装最基础的模块
[root@localhost nginx-1.10.3]# yum -y install pcre-devel
安装gzip
[root@localhost nginx-1.10.3]# yum -y install zlib-devel
以上都是在编译安装nginx时需要的一些环境
4.编辑nginx
[root@localhost nginx-1.10.3]# ./configure --prefix=/usr/local/nginx
--------{{备注:可选
yum -y install openssl openssl-devel
--prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module
--------}}
[root@localhost nginx-1.10.3]# make
[root@localhost nginx-1.10.3]# make install
5.启动nginx
查看nginx是否启动
root用户进程号1303的才是,nobody的可以删除
6.重启nginx
7.防火墙问题
Centos7默认使用的firewall作为防火墙
[root@localhost ~]# firewall-cmd --state 查看防火墙运行状态
running
[root@localhost ~]# systemctl start firewalld.service 开启防火墙
[root@localhost ~]# systemctl stop firewalld.service 关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service 彻底关闭防火墙,开机不启动
[root@localhost ~]# systemctl enable firewalld.service 开启防火墙,开机启动
启动防火墙后增加80端口
[root@localhost ~]# firewall-cmd --add-port=80/tcp
success
局域网访问http://192.168.210.100
8.配置nginx,根据不同的域名转发到不同的主机,直接编辑nginx.conf
路由器配置虚拟机服务器,将80端口指向nginx,也就是192.168.210.100这台主机,可将配置文件自带的server注释掉,然后添加如下内容,这样在访问www.a.com这个域名时便可转向到192.168.210.230这台主机,在访问www.b.com这个域名时转向到192.168.210.231这台主机
upstream a-server{
ip_hash;
server 192.168.210.230;
}
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://a-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream b-server{
ip_hash;
server 192.168.210.231;
}
server {
listen 80;
server_name www.b.com;
location / {
proxy_pass http://b-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
修改完配置文件后记得重启nginx.
重启1:
进入nginx目录
[root@localhost ~]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx
[root@localhost sbin]# ./nginx -s reload
重启2:
当nginx已经在运行时,则需要平滑重启,步骤如下:
先查看nginx master的pid: ps aux|grep nginx|grep master
[root@localhost ~]# ps aux|grep nginx|grep master
root 1303 0.0 0.0 21932 1868 ? Ss 3月08 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx的pid为1303,如下平滑重启命令,完成重启
[root@localhost ~]# kill -HUP 1303
开放80端口:
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=80/udp
让firewall-cmd重新加载配置:
sudo firewall-cmd --reload
再次列一下当前防火墙配置看是否开放成功:
firewall-cmd --list-all
遇到的错误及解决办法
1.nginx/logs/nginx.pid" failed (2: No such file or directory)
解决方法:
重新编译(make,make install),安装就好.
2.[emerg]mkdir()"/var/temp/nginx/client" failed(2:No such file or directory)
解决方法:
查看了一下是由于没有Nginx/client的目录.缺少对应的文件,建立相应的文件就好.
参考1:https://www.cnblogs.com/ghjbk/p/6744131.html
参考2:http://blog.csdn.net/agangdi/article/details/41087921
参考3:负载均衡
upstream myserver{
# ip_hash;
server 192.168.200.21;
server 192.168.200.22;
server 192.168.200.23;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf|eot|woff2|ttf|svg)(.*) {
proxy_pass http://myserver ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}
location / {
proxy_pass http://myserverbcs;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Nginx的负载分发策略
Nginx 的 upstream目前支持的分配算法:
1.轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
2.权重 ——you can you up
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
3.ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。