CentOS7 Nginx安装及配置反向代理

Posted DotNet开发跳槽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7 Nginx安装及配置反向代理相关的知识,希望对你有一定的参考价值。

来源:https://www.cnblogs.com/xiaoruilin/p/7782214.html

背景:

  Mono (Mono JIT compiler version 5.4.0.201 )

  jexus-5.8.2-x64(《CentOS7 安装 jexus-5.8.2-x64》)

  VirtualBox5.1.22(3个CentOS7系统) (192.168.5.147、192.168.5.182、192.168.5.183)

  参考资料:

  http://www.cnblogs.com/guogangj/p/4131704.html(HappyAA服务器部署笔记1(nginx+tomcat的安装与配置))

  http://www.cnblogs.com/guogangj/p/5207104.html(简易nginx TCP反向代理设置)

  http://www.cnblogs.com/bass6/p/5948199.html(CNginx反向代理设置 从80端口转向其他端口)

  http://www.cnblogs.com/jeffzhang/p/4664457.html(Centos 7 上使用nginx为Node.js配置反向代理时错误:(13: Permission denied) while connecting to upstream)

  http://www.cnblogs.com/mfrbuaa/p/4866135.html(解决Nginx的connect() to 127.0.0.1:8080 failed (13: Permission denied) while connect)

  http://www.cnblogs.com/zrbfree/p/6419043.html(nginx 安装时候报错:make: *** No rule to make target `build', needed by `default'. Stop.)

  写这篇文章也是为了记录我的履试不爽的过程,怕以后很久不用就忘了,感谢园子及贡献者。

1、三个CentOS7系统准备

  

2、安装Jexus《CentOS7 安装 jexus-5.8.2-x64》本想只安装182:8888,183:7777,index.html内容设置不同,但因设置好后始终把错误:"502 Bad Gateway"

于是将147:8080也安装 上并设置

3、安装Nginx

#yum update
更新一些库和必要的支持,完了之后去下载一个nginx的最新版,如今我责编的版本是1.7.7:
#wget http://nginx.org/download/nginx-1.13.6.tar.gz
解压缩
#tar -zvxf nginx-1.13.6.tar.gz
#cd nginx-1.13.6
nginx有很多很多编译配置项,但由于我这是第一篇笔记,所以我基本上都使用了默认的配置:
#./configure --with-http_ssl_module --with-http_gzip_static_module
我只加了两个选项,--with-http_ssl_module表示使用ssl模块,--with-http_gzip_static_module表示使用gzip模块,其它更详细的配置就要参考nginx的文档了:http://nginx.org/en/docs/configure.html

如果没configure成功(会显示XXX not found),那是因为有些依赖没有被正确安装.那么先安装一下这些依赖条件,通常是pcre,zlib这些,这么一下就基本上可以了:
#yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

#make
#make install

可执行文件就会被安装在: /usr/sbin/nginx (默认配置)


nginx基本使用

程序位置:/usr/local/nginx/sbin/nginx 

配置文件位置:/usr/local/nginx/conf/nginx.conf

 

启动nginx:
#cd /usr/local/nginx/sbin/
#./nginx

如果运行的时候不带-c参数,那就采用默认的配置文件,即/etc/nginx/nginx.conf

查看运行进程状态:
# ps aux | grep nginx

打开浏览器,访问http://localhost/看看nginx的默认页面:

停止nginx:
#./nginx -s stop

重启nginx(配置文件变动后需要重启才能生效):
#./nginx -s reload

检查配置文件是否正确:
#./nginx -t

查看nginx的pid:
cat /usr/local/nginx/logs/nginx.pid

查看nginx版本
$ ./nginx -v

回头看编译配置
# ./nginx -V

4、Nginx配置

#vi /etc/nginx/nginx.conf

user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  sendfile on;

  keepalive_timeout 65;

  server {
    listen 80;

    server_name localhost;

    location / {
      proxy_pass http://192.168.5.147:8080;
    }

  }
}

按上面这样配置按理应该可以访问http://192.168.5.147 显示的应该是147:8080的网页内容,但 就是报错了

于是,这才查看日志

#vi /var/log/nginx/error.log

2017/11/03 05:23:53 [crit] 1331#1331: *12 connect() to 192.168.5.147:8080 failed 
(13: Permission denied) while connecting to upstream, client: 192.168.5.65, server: localhost,
request: "GET / HTTP/1.1", upstream: "http://192.168.5.147:8080/", host: "192.168.5.147"

园子中搜“(13: Permission denied) while connecting to upstream, client:”就找到原因,

type=AVC msg=audit(1509701033.988:119): avc: denied { name_connect } for pid=1331 
comm="nginx" dest=8080 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

处理:

#setsebool -P httpd_can_network_connect 1

到这里应该就正常了,反向代理的后面设置

下面是设置两个服务器


user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
  worker_connections 1024;
}

http {
  include /etc/nginx/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 /var/log/nginx/access.log main;

  sendfile on;
  #tcp_nopush on;

  keepalive_timeout 65;

  #gzip on;

  upstream test {
    server 192.168.5.182:8888;
    server 192.168.5.183:7777;
  }
  server {
    listen 80;
    server_name localhost;

    location / {
      proxy_pass http://test;
      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_set_header Cookie $http_cookie;
    }
  }
}


配置守护进程安装Supervisor

yum install Supervisor

Supervisor配置文件,创建一个ini 配置文件 webcore.ini

[program:webcore]command=dotnet webcore.dlldirectory=/home/testenvironment=ASPNETCORE__ENVIRONMENT=Productionuser=rootstopsignal=INTautostart=trueautorestart=truestartsecs=3stderr_logfile=/var/log/webcore.err.log 
stdout_logfile=/var/log/webcore.out.log

创建好之后,使用 xftp 上次到 /etc/supervisord.d 目录下

最后启动

supervisord -c /etc/supervisord.conf

执行 nginx -s reload

访问 nginx 绑定的域名可以看到网站可以跑起来了 http://test.fun5.cn/

到这里基本上就配置好了 nginx + linux + .net core 2.0


如果想要supervisord开机自启动

编辑启动文件

vi /etc/rc.local

在新行添加要执行的命令

supervisord  -c /etc/supervisord.conf

常用命令

查看所有action

supervisorctl help

控制所有进程

supervisorctl start allsupervisorctl stop allsupervisorctl restart all

控制目标进程


supervisorctl stop shadowsockssupervisorctl start shadowsockssupervisorctl restart shadowsocks





以上是关于CentOS7 Nginx安装及配置反向代理的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7 Nginx安装及配置反向代理

Nginx安装CentOS7安装Nginx及配置

linux 安装 nginx 及反向代理配置

Centos7.4 Nginx反向代理+负载均衡配置

Centos 7配置nginx反向代理负载均衡集群

Nginx的反向代理及ssl配置