安装依赖包
# Nginx源码安装依赖gcc环境
yum install -y gcc-c++
# 安装正则表达式库
yum install -y pcre pcre-devel
# 安装zlib,可以支持Nginx的gzip
yum install -y zlib zlib-devel
# 安装安全密码库,简单理解就是支持https
yum install -y openssl openssl-devel
# 一句话的事
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
Nginx安装
编译安装参数
参数 | 说明 |
---|---|
prefix | 安装目录 |
sbin-path | 启动Nginx服务需要的文件. |
conf-path | 配置文件路径,文件名 |
error-log-path | 错误日志文件路径,文件名 |
pid-path | 进程pid设置的文件路径,文件名 |
http-log-path | 请求日志的文件路径,文件名 |
编译安装
# 官网下载最新版本
cd /data/softpackage/
# 2019-06-25发布的最新版本1.17.1
wget -c https://nginx.org/download/nginx-1.17.1.tar.gz
# 解压
tar -zxvf nginx-1.17.1.tar.gz
cd nginx-1.17.1
# 配置
./configure --prefix=/user/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/config/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --pid-path=/user/local/nginx/logs/nginx.pid --http-log-path=/usr/local/nginx/logs/access.log
# 编译安装
make && make install
端口开放
vim /etc/sysconfig/iptables
# 添加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8000:9999 -j ACCEPT
# 重启iptabels
service iptables restart
# 重启防火墙,建议都执行一下
// 即时生效,重启生效
service iptables start
// 重启后生效
chkconfig iptables off
chkconfig iptables on
Nginx使用
启动
cd /usr/local/nginx/
# 编辑配置文件
vim config/nginx.conf
# 去掉注视
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
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;
# 保存退出,启动nginx
./sbin/nginx
# 查看是否启动成功
netstat -anp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 86817/nginx: master
静态资源
vim /usr/local/nginx/config/nginx.conf
# 修改root,静态资源路径
server {
listen 80;
server_name localhost;
location / {
root /data/wwwroot/liveTelecast/public/static/;
index index.html index.htm;
}
...
}
Nginx转发到Swoole
# 修改nginx配置
vim /usr/local/nginx/config/nginx.conf
-- 思想
# 在location添加判断,目录下没有静态资源转发到swoole
# 访问swoole服务
curl 192.168.128.131:9503/index/index/qvbilam
# 返回
123Array
(
[success] => 0
[error_phone_empty] => 100001
[error_phone_type] => 100002
[error_code_empty] => 100003
[error_code] => 100004
[error_sms_error] => 100005
[error_phone_code_empty] => 100006
[error_login_set] => 100007
[error_upload_image] => 100008
[error_perfect] => 100009
[error_perfect_token] => 100010
[error_perfect_empty] => 100010
[error_admin_game_id_empty] => 100011
[error_admin_game_data_empty] => 100012
)
qvbilam%
# 访问nginx服务
curl 192.168.128.131
# 返回
<h1>hello!羡仙.</h1>
# 修改nginx配置
vim /usr/local/nginx/config/nginx.conf
# 添加proxy_pass做转发
location / {
root /usr/local/nginx/html;
index index.html index.htm;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9503;
}
}
# 重启nginx访问nginx服务
curl 192.168.128.131/index/index/qvbilam
# 返回9503到swoole服务内容
123Array
(
[success] => 0
[error_phone_empty] => 100001
[error_phone_type] => 100002
[error_code_empty] => 100003
[error_code] => 100004
[error_sms_error] => 100005
[error_phone_code_empty] => 100006
[error_login_set] => 100007
[error_upload_image] => 100008
[error_perfect] => 100009
[error_perfect_token] => 100010
[error_perfect_empty] => 100010
[error_admin_game_id_empty] => 100011
[error_admin_game_data_empty] => 100012
)
qvbilam%
负载均衡
对于初学者来说这个东西听起来很高大深奥,其实也没啥牛逼的.只需修改nginx.conf
加个几行代码就能实现的东西.
Nginx配置
# 修改nginx.conf
vim /usr/local/nginx/config/nginx.conf
# 在http中添加upstream,修改proxy_pass转发
http {
...
upstream qvbilam_swoole{
server 192.168.128.131:9503 weight=2;
server 192.168.128.132:9503 weight=1;
server 192.168.128.133:9503 weight=1;
server 192.168.128.134:9503 weight=1;
}
server {
...
root /usr/local/nginx/html;
index index.html index.htm;
if (!-e $request_filename) {
# proxy_pass http://127.0.0.1:9503;
proxy_pass http://qvbilam_swoole;
}
}
}
# 重启nginx服务
#
测试
// 添加新的测试方法
vim application/index/controller/Index.php
public function test()
{
// 添加不同的返回内容
}
设置返回内容
服务器 | 返回内容 |
---|---|
192.168.128.131 | QvBilam 第一台虚拟机 |
192.168.128.132 | QvBilam 第二台虚拟机 |
192.168.128.133 | QvBilam 第三台虚拟机 |
192.168.128.134 | QvBilam 第四台虚拟机 |
测试结果
➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第一台虚拟机% ➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第一台虚拟机% ➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第二台虚拟机% ➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第三台虚拟机% ➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第四台虚拟机% ➜ /Users/qvbilam curl 192.168.128.131/index/index/test
QvBilam 第一台虚拟机%
关于负载均衡
nginx负载均衡一共有五种,本次采用的是权重算法
,
131 weight=2; // 访问概率2/6
132 weight=1; // 访问概率1/6
133 weight=1; // 访问概率1/6
134 weight=2; // 访问概率2/6
还有一种通过ip分配到不同的服务器,比如同一个ip访问会一直第一次到的机器上,不会跑到别的机器.
upstream qvbilam_swoole{
ip_hash;
server 192.168.128.131:9503;
server 192.168.128.132:9503;
server 192.168.128.133:9503;
server 192.168.128.134:9503;
}
在以后的Nginx
篇将会详细介绍各种算法的用法.