网站部署了流量代理服务(例如Web应用防火墙、DDoS高防、CDN)后,
源站服务器可以通过解析回源请求中的X-Forwarded-For记录,获取客户端的真实IP。
1,查看原来nginx的安装模块
./nginx -V
没有安装
2,重新编译原来的nginx
cd /tmp/nginx-1.18.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
make
make install
./nginx -V
安装成功
3,添加nginx的realip配置
在nginx.conf的http模块添加下面的代码。全局添加
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
以及 nginx的日志格式在log_format中添加http_x_forwarded_for字段,替换默认的remote_address字段、
log_format main '$request_time - $upstream_response_time - $upstream_addr - $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
4,重启nginx
./nginx -s reload
5、非覆盖安装
参考链接:
上面是重新安装nginx,下面的是非覆盖安装
nginx添加模块(非覆盖安装)
原已经安装好的nginx,现在需要添加一个未被编译安装的模块:
查看原来编译时都带了哪些参数
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre
进入nginx源码目录
#cd nginx-1.3.2
添加的参数 (添加之前已经过的编译模块,不然最后只有新编译模块)
#./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-http_ssl_module
编译
#make { 不要make install,否则就是覆盖安装 }
make完之后在objs目录下就多了个nginx,这个就是新版本的程序了
替换nginx二进制文件
#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak (备份之前的nginx二进文件)
#cp ./objs/nginx /usr/local/nginx/sbin/
测试新的nginx程序是否正确
#/usr/local/nginx/sbin/nginx -t
nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/nginx/conf/nginx.conf test issuccessful
重新加载nginx
/usr/local/nginx/sbin/nginx -s reload
查看ngixn版本极其编译参数
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-http_ssl_module
昨天在网上找的这方面的资料都显示,只需要安装现在需要的就可以,经过我多次测试,最后nginx -V 显示出来只有新的安装,之前的编译都没有显示,所以要使用新的nginx 模块一定要把之前的编译过的 再一次安装。
重点:只需要make ,不需要make instll (make install 会把你之前的配置都覆盖掉)!
安装nginx
1.安装依赖包
一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2.下载并解压安装包
//创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
//下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
3.安装nginx
//进入nginx目录
cd /usr/local/nginx
//进入目录
cd nginx-1.13.7
//执行命令 考虑到后续安装ssl证书 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
//执行make命令
make
//执行make install命令
make install
4.启动nginx服务
./usr/local/nginx/sbin/nginx
4.配置nginx.conf
#打开配置文件
vi /usr/local/nginx/conf/nginx.conf
将端口号改成8089(随便挑个端口),因为可能apeache占用80端口,apeache端口尽量不要修改,我们选择修改nginx端口。
将localhost修改为你服务器的公网ip地址。
5.重启nginx
/usr/local/nginx/sbin/nginx -s reload
查看nginx进程是否启动:
ps -ef | grep nginx
6.若想使用外部主机访问nginx,需要关闭服务器防火墙或开放nginx服务端口,端口为上一步nginx.conf的配置端口:
centOS6及以前版本使用命令: systemctl stop iptables.service
centOS7关闭防火墙命令: systemctl stop firewalld.service
关闭防火墙会导致服务器有一定风险,所以建议是单独开放服务端口 :
开放80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
查询端口号80 是否开启:
firewall-cmd --query-port=80/tcp
重启防火墙:
firewall-cmd --reload
随后访问该ip:端口 即可看到nginx界面。
7.访问服务器ip查看(备注,由于我监听的仍是80端口,所以ip后面的端口号被省略)
安装完成一般常用命令
进入安装目录中,
命令: cd /usr/local/nginx/sbin
启动,关闭,重启,命令:
./nginx 启动
./nginx -s stop 关闭
./nginx -s reload 重启