网站部署了流量代理服务(例如Web应用防火墙、DDoS高防、CDN)后,

源站服务器可以通过解析回源请求中的X-Forwarded-For记录,获取客户端的真实IP。

1,查看原来nginx的安装模块

./nginx -V

nginx ipv6地址 nginx x real ip_nginx


没有安装

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

nginx ipv6地址 nginx x real ip_重启_02


安装成功

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 重启