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. 【转】一个从32位机器移植到64位机器时的c问题

    原文网址:http://www.jiancool.com/article/96402954887/ 最近工作中遇到了一个讨厌的问题,在32位机器上运行的好好的,但是在64位机器上,出现了诡异的 Seg ...

  2. 极简AWR报告收集指导

    1.以oracle用户登录oracle数据库,执行如下命令登录数据库: sqlplus / as sysdba 2.运行如下命令: @?/rdbms/admin/awrrpt.sql 3.出现如下信息 ...

  3. print带参数格式

    string_1 = "Camelot" string_2 = "place" print("float:%lf. int:%d string:%s. ...

  4. postGreSQL数据库部署及简单使用

    1,deployByRuiyIns rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.no ...

  5. 《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法

    public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可 ...

  6. python3-day2(基本回顾)

    1.作用域 1>外层变量可以被内层变更使用 2>内层变更不可以被外层使用 global nonlocal 2.对于Python,一切事物都是对象,对象基于类创建 3.练习 有如下值集合 [ ...

  7. qt QSortFilterProxyModel

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.Qt import * from PyQt4. ...

  8. (转)25个增强iOS应用程序性能的提示和技巧--初级篇

    在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程 ...

  9. sql执行顺序整理

    sql的执行顺序,是优化sql语句执行效率必须要掌握的.各个数据库可能有细小的差别,但大体顺序是相同的,这里只做大致说明. 一.总体执行顺序 在sql语句执行之前,还有SQL语句准备执行阶段,这里不做 ...

  10. chroot 与 jail

    所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全. 创建chr ...