nginx虚拟主机和域名跳转

nginx介绍

nginx官网 :nginx.org
nginx主要应用web服务、反向代理和负载均衡的作用上
nginx分支,淘宝基于nginx开发的Tengine,使用上和nginx一致,服务和配置名一致
nginx比起apache在处理静态页面时更有优势,nginx最大区别在于Tenging支持一些定制化模块,在安全限速方面比较突出,支持js、css合并,优化web的高并发的访问需求
nginx核心+lua相关组件和模块可以组成一个支持lua的高性能web容器openresty,openresty(openr‘s‘t)支持更高性能的web访问需求

安装nginx

在官网下载nginx解压,执行默认的编译参数,不加其他的参数选项,后面学习需要模块的话再重新编译
解压nginx编译安装包,并configure执行编译

[[email protected] src]# wget http://nginx.org/download/nginx-1.15.2.tar.gz
--2018-08-10 22:48:38-- http://nginx.org/download/nginx-1.15.2.tar.gz
正在解析主机 nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2606:7100:1:69::3f, ...
正在连接 nginx.org (nginx.org)|206.251.255.63|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1025746 (1002K) [application/octet-stream]
正在保存至: “nginx-1.15.2.tar.gz”
100%[====================================================>] 1,025,746 3.43KB/s 用时 4m 34s
2018-08-10 22:53:12 (3.66 KB/s) - 已保存 “nginx-1.15.2.tar.gz” [1025746/1025746])
[[email protected] src]# tar zxf nginx-1.15.2.tar.gz -C .
[[email protected] src]# cd nginx-1.15.2/
[[email protected] nginx-1.15.2]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[[email protected] nginx-1.15.2]# ./configure --prefix=/usr/local/nginx
checking for OS
 + Linux 3.10.0-514.el7.x86_64 x86_64
checking for C compiler ... found
---------------------------------省略过程
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
[[email protected] nginx-1.15.2]# make
make -f objs/Makefile
make[1]: 进入目录“/usr/local/src/nginx-1.15.2”
[[email protected] nginx-1.15.2]# make install
------------------------------------省略过程

编译安装后编写nginx的启动脚本文件,这个文件存放在/etc/init.d/目录下,给予权限755,我这里想给nginx添加到系统启动中,但是chkconfig提示不支持此操作,这是因为在启动脚本前需要指定配置chkconfig的默认的一个运行级别,否则chkconfig时就会提示不支持此操作

[[email protected] conf]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start()
{
 ? ?echo -n $"Starting $prog: "
 ? ?mkdir -p /dev/shm/nginx_temp
 ?  daemon $NGINX_SBIN -c $NGINX_CONF
 ? ?RETVAL=$?
 ? ?echo
 ?  return $RETVAL
}
stop()
{
 ? ?echo -n $"Stopping $prog: "
 ?  killproc -p $NGINX_PID $NGINX_SBIN -TERM
 ? ?rm -rf /dev/shm/nginx_temp
 ? ?RETVAL=$?
 ? ?echo
 ?  return $RETVAL
}
reload()
{
 ? ?echo -n $"Reloading $prog: "
 ?  killproc -p $NGINX_PID $NGINX_SBIN -HUP
 ? ?RETVAL=$?
 ? ?echo
 ?  return $RETVAL
}
restart()
{
 ? ?stop
 ? ?start
}
configtest()
{
 ? ?$NGINX_SBIN -c $NGINX_CONF -t
 ?  return 0
}
case "$1" in
 ?start)
 ? ? ? ?start
 ? ? ?  ;;
 ?stop)
 ? ? ? ?stop
 ? ? ?  ;;
  reload)
 ? ? ?  reload
 ? ? ?  ;;
 ?restart)
 ? ? ? ?restart
 ? ? ?  ;;
  configtest)
 ? ? ?  configtest
 ? ? ?  ;;
  *)
 ? ? ? ?echo $"Usage: $0 {start|stop|reload|restart|configtest}"
 ? ? ? ?RETVAL=1
esac
exit $RETVAL
[[email protected] nginx-1.15.2]# chkconfig --add nginx

服务 nginx 不支持 chkconfig ? ?---------错误提示,需要在启动配置文件前添加chkconfig运行级别配置

[[email protected] nginx-1.15.2]# chmod 755 /etc/init.d/nginx
[[email protected] conf]# chkconfig --add nginx
[[email protected] conf]# chkconfig nginx on
[[email protected] conf]# chkconfig --list
mysqld ? ? ? ?  0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole ? ?  0:关 1:关 2:关 3:关 4:关 5:关 6:关
network ? ? ?   0:关 1:关 2:开 3:开 4:开 5:开 6:关
nginx ? ? ? ?   0:关 1:关 2:开 3:开 4:开 5:开 6:关
php-fpm ? ? ?   0:关 1:关 2:开 3:开 4:开 5:开 6:关

chkconfig添加系统自启动后无报错,再配置nginx.conf的配置文件,这里简单描述下其参数功能,其功能如下:

[[email protected] conf]# vim nginx.conf
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
 ?  use epoll;
 ?  worker_connections 6000;
}
http
{
 ?  include mime.types;
 ?  default_type application/octet-stream;
 ?  server_names_hash_bucket_size 3526;
 ?  server_names_hash_max_size 4096;
 ?  log_format combined_realip ‘$remote_addr $http_x_forwarded_for [$time_local]‘
 ? ?‘ $host "$request_uri" $status‘
 ? ?‘ "$http_referer" "$http_user_agent"‘;
 ?  sendfile on;
 ?  tcp_nopush on;
 ?  keepalive_timeout 30;
 ?  client_header_timeout 3m;
 ?  client_body_timeout 3m;
 ?  send_timeout 3m;
 ?  connection_pool_size 256;
 ?  client_header_buffer_size 1k;
 ?  large_client_header_buffers 8 4k;
 ?  request_pool_size 4k;
 ?  output_buffers 4 32k;
 ?  postpone_output 1460;
 ?  client_max_body_size 10m;
 ?  client_body_buffer_size 256k;
 ?  client_body_temp_path /usr/local/nginx/client_body_temp;
 ?  proxy_temp_path /usr/local/nginx/proxy_temp;
 ?  fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
 ?  fastcgi_intercept_errors on;
 ?  tcp_nodelay on;
 ?  gzip on;
 ?  gzip_min_length 1k;
 ?  gzip_buffers 4 8k;
 ?  gzip_comp_level 5;
 ?  gzip_http_version 1.1;
 ?  gzip_types text/plain application/x-javascript text/css text/htm
 ?  application/xml;
 ?  server
 ?  {
 ? ? ?  listen 80;
 ? ? ?  server_name localhost;
 ? ? ?  index index.html index.htm index.php;
 ? ? ?  root /usr/local/nginx/html;
 ? ? ?  location ~ \.php$
 ? ? ?  {
 ? ? ? ? ?  include fastcgi_params;
 ? ? ? ? ?  fastcgi_pass unix:/tmp/php-fcgi.sock;
 ? ? ? ? ?  fastcgi_index index.php;
 ? ? ? ? ?  fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
 ? ? ?  } ? ?
 ?  }
}
nginx的全局配置
user nobody nobody; ? ? ? 指定nginx进程的运行用户
worker_processes 2; ? ? ?  一个父进程开启的子进程
error_log /usr/local/nginx/logs/nginx_error.log crit; ? ? 日志存放的目录
pid /usr/local/nginx/logs/nginx.pid; ? ? ? ? ?  启动停止时更新的pid文件
worker_rlimit_nofile 51200; ? ? ? ? ?  每个进程最大打开文件的数量

使用ps -aux查看nginx进程时会看到一个Ss的父进程,父进程是由root用户运行,其子进程是由服务的服务用户运行的,如nobody用户

server部分配置

server
 ?  {
 ? ? ?  listen 80; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  nginx的启动端口
 ? ? ?  server_name localhost; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  nginx本地解析名称,这里填写网站域名
 ? ? ?  index index.html index.htm index.php; ? ? ? ? ? ? 指定默认的网站页面
 ? ? ?  root /usr/local/nginx/html; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 指定网站根目录

 ? ? ?  location ~ \.php$ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  php解析模块配置
 ? ? ?  {
 ? ? ? ? ?  include fastcgi_params; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  php的工作模式
 ? ? ? ? ?  fastcgi_pass unix:/tmp/php-fcgi.sock; ? ? ? ? ? nginx的通信类型,另一种类型是127.0.0.1:9000;的回环地址解析的方式
 ? ? ? ? ?  fastcgi_index index.php; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? php解析的首页
 ? ? ? ? ?  fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
 ? ? ?  } ? ?
 ?  }
}

nginx默认虚拟主机

nginx配置默认虚拟主机除了server模块方式,还有指定虚拟主机配置文件这个方式,指定单独的虚拟主机配置文件,一个配置文件就是一个虚拟主机,这里只简单配置一个虚拟主机,不涉及域名和其他配置
在nginx.conf配置文件中加入指定虚拟主机配置文件的配置路径,这里只需要打开虚拟主机配置文件即可,添加虚拟主机配置文件必须把nginx.conf配置文件中的server配置模块删除掉,否则虚拟主机配置文件则不会生效

[[email protected] conf]# vim nginx.conf
 ?  application/xml;
 ?  include vhost/*.conf;
 ?  server

配置默认虚拟主机文件,默认虚拟主机文件是保存在vhost目录下的。vhost在conf目录下,默认是不存在的,需要手动创建,默认虚拟主机的根网站路径也是不存在的,需要手动创建

[[email protected] conf]# ls
fastcgi.conf fastcgi_params.default mime.types nginx.conf.1 scgi_params.default win-utf
fastcgi.conf.default koi-utf mime.types.default nginx.conf.default uwsgi_params
fastcgi_params koi-win nginx.conf scgi_params uwsgi_params.default
[[email protected] conf]# mkdir vhost
[[email protected] conf]# cd vhost/
[[email protected] vhost]# vim a.nginx.conf
server
{
 ? listen 80 default_server;
 ? server_name aaa.com;
 ? index index.html index.htm index.php;
 ? root /data/wwwroot/aaa;
}

编辑虚拟主机配置文件中指定的网站根目录的页面进行测试,-s reload是重新加载配置文件,不用重启nginx服务,这里没有域名,所以测试访问是在本机访问回环地址进行测试的,配置域名解析后即可公网测试访问

[[email protected] vhost]# mkdir -p /data/wwwroot/aaa
[[email protected] vhost]# vim /data/wwwroot/aaa/index.php
<?php
phpinfo();
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload
-------------------------测试url访问
[[email protected] conf]# curl localhost
This is the default site.
[[email protected] conf]# curl -x127.0.0.1:80 aaa.com
This is the default site.

nginx用户认证

在conf/vhost/目录下编辑一个虚拟主机配置文件,这里定义新虚拟主机配置文件为b.conf

[[email protected] vhost]# vim b.conf
server
{
 ? listen 80 ;
 ? server_name b.com;
 ? index index.html index.htm index.php;
 ? root /data/wwwroot/b;
 ?
 ?
 ? location /
 ? {
 ? ? ? ? ? auth_basic "Auth";
 ? ? ? ? ? auth_basic_user_file /usr/local/nginx/conf/htpasswd;
 ? }
}

指定用户认证需要使用到apache的htpasswd的密码生成工具,这里可以使用yum安装httpd,在使用完成后也可删除,建议保留,方便日后再次添加认证用户

[[email protected] vhost]# htpasswd -c /usr/local/nginx/conf/htpasswd user
New password:
Re-type new password:
Adding password for user user
[[email protected] vhost]# htpasswd /usr/local/nginx/conf/htpasswd user1 ? ? ?  再次添加一个用户
New password:
Re-type new password:
Adding password for user user1
[[email protected] vhost]# cat /usr/local/nginx/conf/htpasswd
user:$apr1$AUrl5dQq$GpglCih5wADphsN7KJ0LQ1
user1:$apr1$Nfc9PosN$OHQFumTtuYxb3.LR4v72J1

测试下访问用户认证,401错误码表示页面限制访问,curl -u指定用户认证访问测试

[[email protected] vhost]# curl -x127.0.0.1:80 b.com
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.15.2</center>
</body>
</html>
[[email protected] vhost]# curl -uuser1:[email protected] -x127.0.0.1:80 b.com
bbb

设置页面、目录用户认证访问,location(lou;‘k;‘sèng)模块后配置匹配限制访问的目录或页面

[[email protected] vhost]# vim b.conf
server
{
 ? listen 80;
 ? server_name b.com;
 ? index index.html index.htm index.php;
 ? root /data/wwwroot/b;
 ? location ?  ~  admin.php ? ? ? ? ? ? ? ? ? ? ? ? ?  匹配规则: ? ? ?  ~ admin.php ? 或者匹配目录 ? /admin/
 ? {
 ? ? ? ? ? auth_basic "Auth";
 ? ? ? ? ? auth_basic_user_file /usr/local/nginx/conf/htpasswd;
 ? }
}

nginx域名重定向

nginx域名重定向比httpd域名重定向配置起来要简单很多,其匹配域名也能写多个,httpd中配置域名跳转只能匹配一个域名,针对一个域名进行跳转,nginx的server_name后可以跟多个域名进行匹配,当有访问到匹配的域名时,nginx就会把访问跳转至rewrite指定跳转的域名上,配置及测试如下

[[email protected] vhost]# vim aaa.conf
server
{
 ? listen 80 default_server;
 ? server_name ddd.com ccc.com;
 ? server_name aaa.com;
 ? index index.html index.htm index.php;
 ? root /data/wwwroot/aaa;
 ? if ($host != ‘test.com‘)  {
 ? ? ? ?  rewrite ^/(.*)$ http://aaa.com/$1  permanent;
 ? }
}

重新加载配置文件并测试ccc.com域名跳转

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload
[[email protected] vhost]# curl -x127.0.0.1:80 ccc.com/index.php -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.2
Date: Fri, 10 Aug 2018 19:03:20 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://aaa.com/index.php

测试ddd.com域名跳转

[[email protected] vhost]# curl -x127.0.0.1:80 ddd.com/index.php -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.2
Date: Fri, 10 Aug 2018 19:03:43 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://aaa.com/index.php

原文地址:http://blog.51cto.com/8844414/2159225

时间: 2024-10-08 03:52:59

nginx虚拟主机和域名跳转的相关文章

Nginx虚拟主机 (基于域名 基于端口 基于ip)

Nginx虚拟主机 基于域名的虚拟主机 基于IP地址的虚拟主机 基于端口的虚拟主机 一,安装DNS域名解析服务器 1,安装bind服务器 [[email protected] ~]# yum install bind -y 2,修改主配置文件(named.conf) [[email protected] ~]# vim /etc/named.conf options { listen-on port 53 { any; }; ##监听所有 listen-on-v6 port 53 { ::1;

Nginx虚拟主机之域名,端口,IP

要nginx源码包请私信我 Nginx虚拟主机之域名 [[email protected] ~]# yum install bind -y 配置DNS主配置文件 [[email protected] ~]# vim /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/d

搭建nginx虚拟主机——基于域名、端口和IP

Nginx支持的虚拟主机有三种 1.基于域名的虚拟主机2.基于IP的虚拟主机3.基于端口的虚拟主机且每一种虚拟主机均可通过"server{}" 配置段实现各自的功能 一.基于域名搭建 1.编译安装Nginx服务2.远程获取Windows上的源码包,并挂载到Linux上 [[email protected] ~]# smbclient -L //192.168.235.1 Enter SAMBA\root's password: Sharename Type Comment ------

Apache与Nginx虚拟主机设置(多域名和多端口的区别)

为了方便管理虚拟主机,应该尽量少修改主配置文件http.conf或者nginx.conf,大部分修改变更都在虚拟主机片配置文件httpd- vhost.conf或者vhost.conf中完成,这样有利于调试,降低风险.即便把虚拟主机配置文件修改得一团糟,只要把主配置文件中包含虚拟主机 配置文件的一行注释掉即可. Apache(多域名): 第一步首先要使扩展文件httpd/conf.d/vhosts.conf生效: 1. 打开 apache2/conf/httpd.conf 文件 2. 找到 #

Nginx虚拟主机多server_name的顺序问题

Nginx虚拟主机多server_name的顺序问题  大 | 中 | 小  [ 2008-11-28 11:27 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.11.28 转载请注明原文链接:http://blog.zyan.cc/post/382/] 今天在配置Nginx + PHP + MediaWiki中,发现一个问题:MediaWiki所在的Nginx虚拟主机绑定了多个域名,但是不管通过什么域名访问MediaWiki首页,都会被跳转到其中的一个域名上.N

Nginx虚拟主机配置实践之nginx访问同一个地址方法(二)

Nginx虚拟主机配置实践之nginx访问同一个地址方法(二) 一.虚拟主机别名介绍 虚拟主机别名就是为虚拟主机设置除了主域名以外的另一个或多个域名名字,这样就能实现用户访问的多个域名对应于同一个虚拟主机网站的功能.在生产环境中,以www.afeilinux.com域名的虚拟主机为例,为其增加一个别名afeilinux.com时,在该域名出现的网站内容和访问www.afeilinux.com得到的结果是一样的. 二.实施方法 第一种方法:Nginx虚拟主机的别名配置 更改wtf.conf配置文件

nginx虚拟主机概念和类型介绍

nginx虚拟主机配置实战 1,虚拟主机概念和类型介绍 所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问. 这个这个独立的站点在配置里是由一定格式的标签段标记,对于apache软件来说,一个虚拟主机的标签段通畅被包含在<VirtualHost></VirtualHost>内,而nginx软件则使用一个server{}标签来标示一个虚拟主机,一个web服务里可以有多个虚拟主机主

linux企业常用服务---部署NGINX虚拟主机

部署前准备: 光盘配置本地yum源,修改yum配置文件 防火墙和selinux不做设置,关掉 IP地址设置为192.168.100.222 nginx已安装完成 1.安装安装并配置dns: 安装dns: [[email protected] ~]# yum install bind-utils bind bind-chroot 配置: [[email protected] ~]# cd /var/named/chroot/etc/ 配置主文件: [[email protected] etc]#

四、配置nginx虚拟主机

1.背景: 虚拟主机:一台web主机配置多个站点,每个站点,希望用不同的域名和站点目录,或者是不同的端口,或者是不同的IP. 假设网站的域名为:25linux.com,网站下面设有 http://www.25linux.com;: http://blog.25linux.com;: http://bbs.25linux.com: 三个站点,这样我们可以在一台nginx主机上配置虚拟主机来实现. 通常虚拟主机分为3种: 基于域名,基于端口,基于IP,以及它们的混合来实现,我这里以基于域名的方式来创