Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听。为叙述方便我们称之为受控端口。

nginx监听端口

要查看当前有哪些受控端口可执行:

# semanage port -l | grep '^http_port_t'
http_port_t tcp , , , , , , ,

这里显示了八个端口号,其中包括80端口。由于nginx默认在80端口监听因此启动正常。

# service nginx start

我们接下来可做个试验,看看nginx能否在其它端口上监听,比如8888端口。为此新加/etc/nginx/conf.d/test.conf文件:

# /etc/nginx/conf.d/test.conf
server {
listen ;
server_name localhost;
}

你也可以不新加本文件,而是直接修改/etc/nginx/conf.d/default.conf文件。

完成后让nginx重新加载配置:

# nginx -s reload

虽然该命令执行成功,但实际上8888端口并未处于监听状态:

# netstat -anp | grep 

上面的netstat命令无输出,这表明8888端口不在监听状态。进一步我们查看一下审计日志:

vi /var/log/audit/audit.log

在文件尾部发现如下两行:

 type=AVC msg=audit(1452146884.454:): avc:  denied  { name_bind } for  pid= comm="nginx" src= scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1452146884.454:): arch=c000003e syscall= success=no exit=- a0=b a1=1b5cc60 a2= a3=7ffdaf0be83c items= ppid= pid= auid= uid= gid= euid= suid= fsuid= egid= sgid= fsgid= tty=(none) ses= comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)

这里的详细含义我也不清楚,但肯定的是nginx无权限在8888端口上监听。如果你确实希望nginx在8888端口上监听,则可把8888端口号注册为受控端口。注册前请先检查一下8888端口是否已被登记:

semanage port -l | grep 

如果有输出则表示8888端口已被注册,此时请换用其它端口。

要注册http 8888端口号请执行:

semanage port -a -t http_port_t -p tcp 

作为一种好习惯我们应再次检查一下受控端口列表,看看有没有刚注册的端口号:

semanage port -l | grep '^http_port_t'

最后再让nginx重新加载配置:

# nginx -s reload

此时8888端口应处于监听状态:

# netstat -anp | grep 

nginx反向代理端口

如果你想让你的应用被nginx反向代理,则被反向代理的端口号也必须为已受控端口。

其它说明

不知何故,只当你把nginx启动为服务时端口才受Linux安全性控制,如果你直接运行nginx则不受此控制。

nginx监听端口和反向代理端口的权限问题的更多相关文章

  1. nginx在使用非80端口做反向代理【转】

    设置nginx反向代理,nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 upstream jboss{ server max_fails= fail_timeout=20s; s ...

  2. nginx 监听一个端口同时支持https和http

    nginx 如何想同时支持https和http,必须监听两个不同的端口,比如http:listen 80; https:listen 443;   server { listen 1234 ssl;s ...

  3. nginx监听相同端口,根据域名请求不同的server

    nginx监听相同端口,根据域名请求不同的server 学习了:https://blog.csdn.net/liaosiqian/article/details/54861270 注意其中用的是rew ...

  4. 【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题

    问题描述 1) 当成功的在Service Fabric集群中部署了应用后,如何来访问呢?如果是一个Web服务,它的URL又是什么呢? 2) 当Service Fabric集群中,服务之间如需要相互访问 ...

  5. pluto中监听各个网口的500端口处理逻辑

    1. pluto中监听各个网口的500端口处理逻辑 whack_handle() find_ifaces() find_raw_ifaces4() socket.setsockopt.bind.ioc ...

  6. 使用Nginx对.NetCore站点进行反向代理

    前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...

  7. nginx配置虚拟主机、反向代理和负载均衡

    为了实现这个功能,需要修改nginx的配置文件,将nginx.conf清理一下,使结构更清晰. worker_processes ; events { worker_connections ; } h ...

  8. Nginx源码研究八:nginx监听socket实现流程

    前面描述了nginx系统分析nginx的配置文件,初始化模块相关参数的过程,这里利用nginx监听socket的实现过程,做一次完整的回顾 1.首先,nginx启动的main函数中,会先初始化cycl ...

  9. Nginx服务器部署 负载均衡 反向代理

    Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...

随机推荐

  1. poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题

    题目链接 题目描述:哈密尔顿路问题.n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiC ...

  2. dp优化

    入口 A(fzu 1894) 普通的单调队列,trick是进队判断的符号选取(>=wa , >ac). B(poj 2823) 没什么好说的 ,坑爹poj g++,tle ;c++,ac. ...

  3. Linux基本操作 2-----Linux文件系统基本结构

    Linux的文件系统结构             Linux文件系统为一个倒转的单根树状结构 文件系统的根为"/" 文件系统严格区分大小写 路径使用“/”来分割,在windows使 ...

  4. Maxiee的Vim入门日记(4)——安装windows下的Cscope

    Maxiee今天又学到了一个插件——Cscope.Cscope 是一款用于查看大型工程中的代码的软件.它使用方便,支持快速查找 C Symbol.function 等在工程中所有出现的位置,而不用自己 ...

  5. Linux下Samba的配置

    前言: 为了实现windows 和 Linux以及其它操作系统之间的资源共享,软件商推出nfs 和samba两种解决方案.因为市场上缺乏象pc-nfs那样的client工具,使得Linux和windo ...

  6. [core java学习笔记][第六章接口与内部类]

    接口域内部类 接口 描述类具有什么功能,不给出具体实现. 内部类 用于设计协作关系的类集合 代理 实现任意接口的对象. 6.1 接口 接口声明 public interface Comparable ...

  7. 关于jQuery获取checkbox状态的问题

    这位大神概括的很好 http://www.cnblogs.com/wangkongming/p/4002710.html

  8. nodejs报错 events.js:72 throw er; // Unhandled 'error' event

    var http = require('http'); var handlerRequest = function(req,res){ res.end('hello');}; var webServe ...

  9. C# 仿百度自动匹配

    private void Form1_Load(object sender, EventArgs e) { AutoCompleteStringCollection source = new Auto ...

  10. .net 地址栏传中文乱码 的解决方法

    1.设置web.config文件. <system.web> ...... <globalization requestEncoding="gb2312" res ...