按如下所示为example.com创建目录,使用-p标志创建任何必需的父目录:
$ sudo mkdir -p /var/www/ example.com/html
接下来,使用$USER环境变量分配目录的所有权:
USER:$USER /var/www/ example.com/html/
如果你没有修改你的umask值,你的web根目录的权限应该是正确的,但是你可以通过输入:
$ sudo chmod -R 755 /var/www/ example.com/
接下来,使用gedit或您最喜欢的编辑器创建一个index.html页面示例:
$ gedit /var/www/ example.com/html/index.html
在里面,添加下面的示例HTML:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
为了让Nginx提供这些内容,有必要创建一个具有正确指令的服务器块。 我们不要直接修改默认配置文件,而是在/etc/nginx/sites-available/ example.com上创建一个新文件:
$ sudo gedit /etc/nginx/sites-available/example.com
粘贴到以下配置块中,该块类似于默认值,但已更新为我们的新目录和域名:
server {
listen 80
listen [::]:80
}
请注意,我们已将root配置更新到我们的新目录,并将server_name为我们的域名。
接下来,让我们通过创建一个链接到启动sites-enabled目录来启用该文件,该目录是Nginx在启动过程中读取的:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
现在启用两个服务器模块并将其配置为基于listen和server_name指令响应请求(您可以阅读关于Nginx如何处理这些指令的更多信息):
example.com :将响应 example.com 和 www.example.com 请求。
default :将响应端口80上与其他两个块不匹配的任何请求。
为了避免添加额外的服务器名称可能导致的哈希桶内存问题,有必要调整/etc/nginx/nginx.conf文件中的单个值。
打开文件:sudo gedit /etc/nginx/nginx.conf
找到server_names_hash_bucket_size指令并删除#符号以取消注释该行:
...
http {
...
server_names_hash_bucket_size 64
...
}
...
接下来,测试以确保您的Nginx文件中没有语法错误:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果没有任何问题,请重新启动Nginx以启用您的更改:
$ sudo systemctl restart nginx
熟悉重要的Nginx文件和目录
nginx服务器配置文件:
/etc/nginx :Nginx配置目录。 所有的Nginx配置文件都驻留在这里。
/etc/nginx/nginx.conf :主要的Nginx配置文件。 这可以修改,以更改Nginx全局配置。
/etc/nginx/sites-available/ :可存储每个站点服务器块的目录。 除非将Nginx链接到sites-enabled了sites-enabled目录,否则Nginx不会使用此目录中的配置文件。 通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录启用。
/etc/nginx/sites-enabled/ :存储启用的每个站点服务器块的目录。 通常,这些是通过链接到sites-available目录中的配置文件创建的。
/etc/nginx/snippets :这个目录包含可以包含在Nginx配置其他地方的配置片段。 可重复配置的片段可以重构为片段。
nginx服务器日志文件:
/var/log/nginx/access.log :除非Nginx配置为其他方式,否则每个对您的Web服务器的请求都会记录在此日志文件中。
/var/log/nginx/error.log :任何Nginx错误都会记录在这个日志中。
可以将客户端的逻辑设计成:1.将username,password 封装进buffer
2.连接服务端
3.发送buffer
4.接收二进制的系统当前时间
5.显示时间
代码如下:服务端地址设置部分:
[cpp] view plain copy print?
addr_server.sin_family = AF_INETaddr_server.sin_port = htons( port )
addr_server.sin_addr.s_addr = inet_addr( ip )
创建连接:
sock_client = socket( AF_INET, SOCK_STREAM, 0 )连接服务端代码:
flag = connect( sock_client, ( struct sockaddr* ) &addr_server, sizeof( addr_server ) )设置buffer填充username/password代码:
sprintf(buffer, "%s", "username")sprintf(buffer + 32, "%s", "password" )
buffer[31]=buffer[63] = 0
接着是发送
flag = send( sock_client, buffer, 64, 0 )if( flag == 64 )
{
printf( "send ok\n")
}
接收部分代码:
flag = recv( sock_client, buffer, 64, 0 )if( flag != sizeof( time_t ) )
{
printf( "recv does not follow protocal\n")
close( sock_client )
continue
}
将接收到的二进制数据转成时间
memcpy( curtime, buffer, sizeof( time_t ) )struct tm *ptm = localtime( curtime )
显示时间:
printf( "system time:%04d-%02d-%02d-%02d:%02d:%02d\n", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,ptm->tm_hour, ptm->tm_min, ptm->tm_sec )
关闭连接:
printf( "ok,now we close connection\n" )close( sock_client )
实际开发中,为了追求并发效率和提升搞压效果,客户端需要有一个循环,另外可以多进程同时操作。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)